UNPKG

@cityssm/worktech-api

Version:

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

77 lines (64 loc) 2.32 kB
import { NodeCache } from '@cacheable/node-cache' import { type mssql, connect } from '@cityssm/mssql-multi-pool' import { cacheTimeToLiveSeconds } from '../../apiConfig.js' import type { ResourceItem } from './types.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<ResourceItem>({ 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: mssql.config, itemId: string, bypassCache = false ): Promise<ResourceItem | undefined> { 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`)) as mssql.IResult<ResourceItem> if (itemResult.recordset.length === 0) { return undefined } item = itemResult.recordset[0] cache.set(itemId, item) return item }