UNPKG

@cityssm/worktech-api

Version:

Integrations with the WorkTech work order management system.

88 lines (68 loc) 2.38 kB
import { connect, type mssql } from '@cityssm/mssql-multi-pool' import NodeCache from 'node-cache' import { cacheTimeToLiveSeconds } from '../../apiConfig.js' import type { EquipmentItem } from './types.js' const sql = `SELECT [ITMSysID] as equipmentSystemId, [Item_ID] as equipmentId, coalesce([DESC], '') as equipmentDescription, coalesce([ItemClass], '') as equipmentClass, coalesce([Brand], '') as equipmentBrand, coalesce([Model], '') as equipmentModel, [Year] as equipmentModelYear, coalesce([Serial], '') as serialNumber, coalesce([Plate], '') as plate, coalesce([FlType], '') as fuelType, coalesce([Status], '') as equipmentStatus, coalesce([Comments], '') as comments, coalesce([Location], '') as location, coalesce([Dept], '') as departmentOwned, coalesce([Division], '') as departmentManaged, 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, [Odom] as odometer, [Hours] as jobCostHours, [RunHrs] as hourMeter FROM [WMITM] WITH (NOLOCK) where [Type] in ('Equipment')` const cache = new NodeCache({ stdTTL: cacheTimeToLiveSeconds }) /** * Retrieves a piece of equipment. * @param mssqlConfig - SQL Server configuration. * @param equipmentId - The equipment id. * @returns - The equipment record, if available. */ export async function getEquipmentByEquipmentId( mssqlConfig: mssql.config, equipmentId: string ): Promise<EquipmentItem | undefined> { let equipment: EquipmentItem | undefined = cache.get(equipmentId) if (equipment !== undefined) { return equipment } const pool = await connect(mssqlConfig) const equipmentResult = (await pool .request() .input('equipmentId', equipmentId) .query(`${sql} and Item_ID = @equipmentId`)) as mssql.IResult<EquipmentItem> if (equipmentResult.recordset.length === 0) { return undefined } equipment = equipmentResult.recordset[0] cache.set(equipmentId, equipment) return equipment } /** * Clears the equipment cache. */ export function clearEquipmentCache(): void { cache.flushAll() }