diff --git a/src/services/misc/model.js b/src/services/misc/model.js index 758b101..482a5fb 100644 --- a/src/services/misc/model.js +++ b/src/services/misc/model.js @@ -26,32 +26,67 @@ import { courierModel } from '../../schemas/management/courier.schema.js'; // Map prefixes to models and id fields const PREFIX_MODEL_MAP = { - PRN: { model: printerModel, idField: '_id', type: 'printer' }, - FIL: { model: filamentModel, idField: '_id', type: 'filament' }, - GCF: { model: gcodeFileModel, idField: '_id', type: 'gcodeFile' }, - JOB: { model: jobModel, idField: '_id', type: 'job' }, - PRT: { model: partModel, idField: '_id', type: 'part' }, - PRD: { model: productModel, idField: '_id', type: 'product' }, - VEN: { model: vendorModel, idField: '_id', type: 'vendor' }, - SJB: { model: subJobModel, idField: '_id', type: 'subJob' }, - FLS: { model: filamentStockModel, idField: '_id', type: 'filamentStock' }, - SEV: { model: stockEventModel, idField: '_id', type: 'stockEvent' }, - SAU: { model: stockAuditModel, idField: '_id', type: 'stockAudit' }, - PTS: { model: partStockModel, idField: '_id', type: 'partStock' }, - PDS: { model: null, idField: '_id', type: 'productStock' }, // No productStockModel found - ADL: { model: auditLogModel, idField: '_id', type: 'auditLog' }, - USR: { model: userModel, idField: '_id', type: 'user' }, - NTY: { model: noteTypeModel, idField: '_id', type: 'noteType' }, - NTE: { model: noteModel, idField: '_id', type: 'note' }, - DSZ: { model: documentSizeModel, idField: '_id', type: 'documentSize' }, - DTP: { model: documentTemplateModel, idField: '_id', type: 'documentTemplate' }, - DPR: { model: documentPrinterModel, idField: '_id', type: 'documentPrinter' }, - DJB: { model: documentJobModel, idField: '_id', type: 'documentJob' }, - HST: { model: hostModel, idField: '_id', type: 'host' }, - FLE: { model: fileModel, idField: '_id', type: 'file' }, - POR: { model: purchaseOrderModel, idField: '_id', type: 'purchaseOrder' }, - COS: { model: courierServiceModel, idField: '_id', type: 'courierService' }, - COR: { model: courierModel, idField: '_id', type: 'courier' }, + PRN: { model: printerModel, idField: '_id', type: 'printer', referenceField: '_reference' }, + FIL: { model: filamentModel, idField: '_id', type: 'filament', referenceField: '_reference' }, + GCF: { model: gcodeFileModel, idField: '_id', type: 'gcodeFile', referenceField: '_reference' }, + JOB: { model: jobModel, idField: '_id', type: 'job', referenceField: '_reference' }, + PRT: { model: partModel, idField: '_id', type: 'part', referenceField: '_reference' }, + PRD: { model: productModel, idField: '_id', type: 'product', referenceField: '_reference' }, + VEN: { model: vendorModel, idField: '_id', type: 'vendor', referenceField: '_reference' }, + SJB: { model: subJobModel, idField: '_id', type: 'subJob', referenceField: '_reference' }, + FLS: { + model: filamentStockModel, + idField: '_id', + type: 'filamentStock', + referenceField: '_reference', + }, + SEV: { model: stockEventModel, idField: '_id', type: 'stockEvent', referenceField: '_reference' }, + SAU: { model: stockAuditModel, idField: '_id', type: 'stockAudit', referenceField: '_reference' }, + PTS: { model: partStockModel, idField: '_id', type: 'partStock', referenceField: '_reference' }, + PDS: { model: null, idField: '_id', type: 'productStock', referenceField: '_reference' }, // No productStockModel found + ADL: { model: auditLogModel, idField: '_id', type: 'auditLog', referenceField: '_reference' }, + USR: { model: userModel, idField: '_id', type: 'user', referenceField: '_reference' }, + NTY: { model: noteTypeModel, idField: '_id', type: 'noteType', referenceField: '_reference' }, + NTE: { model: noteModel, idField: '_id', type: 'note', referenceField: '_reference' }, + DSZ: { + model: documentSizeModel, + idField: '_id', + type: 'documentSize', + referenceField: '_reference', + }, + DTP: { + model: documentTemplateModel, + idField: '_id', + type: 'documentTemplate', + referenceField: '_reference', + }, + DPR: { + model: documentPrinterModel, + idField: '_id', + type: 'documentPrinter', + referenceField: '_reference', + }, + DJB: { + model: documentJobModel, + idField: '_id', + type: 'documentJob', + referenceField: '_reference', + }, + HST: { model: hostModel, idField: '_id', type: 'host', referenceField: '_reference' }, + FLE: { model: fileModel, idField: '_id', type: 'file', referenceField: '_reference' }, + POR: { + model: purchaseOrderModel, + idField: '_id', + type: 'purchaseOrder', + referenceField: '_reference', + }, + COS: { + model: courierServiceModel, + idField: '_id', + type: 'courierService', + referenceField: '_reference', + }, + COR: { model: courierModel, idField: '_id', type: 'courier', referenceField: '_reference' }, }; /** diff --git a/src/services/misc/spotlight.js b/src/services/misc/spotlight.js index ee8190e..00ffde3 100644 --- a/src/services/misc/spotlight.js +++ b/src/services/misc/spotlight.js @@ -60,7 +60,7 @@ export const getSpotlightRouteHandler = async (req, res) => { res.status(200).send([]); return; } - const prefix = query.substring(0, 3); + const prefix = query.substring(0, 3).toUpperCase(); const delimiter = query.substring(3, 4); const suffix = query.substring(4); @@ -72,18 +72,32 @@ export const getSpotlightRouteHandler = async (req, res) => { res.status(400).send({ error: 'Invalid or unsupported prefix' }); return; } - const { model, idField, type } = prefixEntry; + const { model, idField, type, referenceField } = prefixEntry; + + const suffixLength = suffix.length; // Validate ObjectId if the idField is '_id' - if (idField === '_id' && !mongoose.Types.ObjectId.isValid(suffix)) { + if ( + idField === '_id' && + referenceField === '_reference' && + !mongoose.Types.ObjectId.isValid(suffix) && + suffixLength != 12 + ) { res.status(200).send([]); return; } // Find the object by the correct field const queryObj = {}; - queryObj[idField] = suffix.toLowerCase(); + + if (suffixLength == 12) { + queryObj[referenceField] = suffix.toUpperCase(); + } else { + queryObj[idField] = suffix.toLowerCase(); + } + let doc = await model.findOne(queryObj).lean(); + if (!doc) { res.status(200).send([]); return;