Implement DeviceModel.distinctCriteriaValues() — fixes 500 on /api/v1/devices/criteria-values. Uses MongoDB distinct() to get unique manufacturers, OUIs, productClasses from devices collection. Build status: Success

This commit is contained in:
ATX Bot authored and Kevin L'Hereec committed 2026-06-08 13:01:19 +00:00
1 parent aad93911e4
commit 23b5e33a6b
2 files changed
+19 -1

No files matched your search

+1 -1
View File
@@ -8,7 +8,7 @@ export default class DevicesController {
private deviceService = new DeviceService()
async criteriaValues({ response }: HttpContext) {
const values = await (DeviceModel as any).distinctCriteriaValues()
const values = await DeviceModel.distinctCriteriaValues()
return response.json(values)
}
+18
View File
@@ -38,6 +38,24 @@ export default class DeviceModel extends BaseModel {
return { data, total }
}
static async distinctCriteriaValues(): Promise<{
manufacturers: string[]
ouis: string[]
productClasses: string[]
}> {
const collection = this.getCollection()
const [manufacturers, ouis, productClasses] = await Promise.all([
collection.distinct('deviceId.manufacturer'),
collection.distinct('deviceId.oui'),
collection.distinct('deviceId.productClass'),
])
return {
manufacturers: manufacturers.filter((v: any) => v && typeof v === 'string').sort(),
ouis: ouis.filter((v: any) => v && typeof v === 'string').sort(),
productClasses: productClasses.filter((v: any) => v && typeof v === 'string').sort(),
}
}
static async createOrUpdate(device: Partial<DeviceRecord>): Promise<DeviceRecord> {
const collection = this.getCollection()
let filter: Filter<any> = {}