UNPKG

@cityssm/worktech-api

Version:

Integrations with the WorkTech (Pearl) work order management system.

60 lines (59 loc) 2.14 kB
import { NodeCache } from '@cacheable/node-cache'; import { connect } from '@cityssm/mssql-multi-pool'; import { cacheTimeToLiveSeconds } from '../../apiConfig.js'; const sql = `SELECT [ITMSysID] as itemSystemId, [Item_ID] as itemId, coalesce([DESC], '') as itemDescription, coalesce([ItemClass], '') as itemClass, coalesce([Type], '') as itemType, coalesce([Brand], '') as itemBrand, coalesce([Model], '') as itemModel, [Year] as itemModelYear, coalesce([Serial], '') as serialNumber, coalesce([Status], '') as itemStatus, coalesce([Location], '') as location, coalesce([Dept], '') as department, coalesce([Division], '') as division, coalesce([Company], '') as company, coalesce([FlType], '') as fuelType, coalesce([ExJob_ID], '') as expenseJobId, coalesce([ExActv_ID], '') as expenseActivityId, coalesce([ExObjCode], '') as expenseObjectCode, coalesce([RevJob_ID], '') as revenueJobId, coalesce([RevActv_ID], '') as revenueActivityId, coalesce([RevObjCode], '') as revenueObjectCode, [Stock] as stock, coalesce([Units], '') as unit, [UnitCost] as unitCost, [QtyHand] as quantityOnHand, coalesce([ExtItem_ID], '') as externalItemId, coalesce([Comments], '') as comments FROM [WMITM] WITH (NOLOCK) where [Type] not in ('Employee', 'Equipment')`; const cache = new NodeCache({ stdTTL: cacheTimeToLiveSeconds }); /** * Retrieves an item. * @param mssqlConfig - SQL Server configuration. * @param itemId - The item id. * @param bypassCache - Whether to bypass the cache * @returns - The item, if available. */ export async function getItemByItemId(mssqlConfig, itemId, bypassCache = false) { let item = bypassCache ? undefined : cache.get(itemId); if (item !== undefined) { return item; } const pool = await connect(mssqlConfig); const itemResult = (await pool .request() .input('itemId', itemId) .query(`${sql} and Item_ID = @itemId`)); if (itemResult.recordset.length === 0) { return undefined; } item = itemResult.recordset[0]; cache.set(itemId, item); return item; }