Added ref spotlight lookup.
This commit is contained in:
parent
944ad34f89
commit
7a947ed2fd
@ -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' },
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user