diff --git a/src/routes/finance/invoices.js b/src/routes/finance/invoices.js index e98aed2..511a25f 100644 --- a/src/routes/finance/invoices.js +++ b/src/routes/finance/invoices.js @@ -47,15 +47,15 @@ import { } from '../../services/finance/invoices.js'; // list of invoices -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listInvoicesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -63,37 +63,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listInvoicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getInvoicePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchInvoicesRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newInvoiceRouteHandler(req, res); }); // get invoice stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getInvoiceStatsRouteHandler(req, res); }); // get invoice history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getInvoiceHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getInvoiceNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getInvoiceRouteHandler(req, res); }); diff --git a/src/routes/finance/payments.js b/src/routes/finance/payments.js index a7707f7..4158d5d 100644 --- a/src/routes/finance/payments.js +++ b/src/routes/finance/payments.js @@ -47,15 +47,15 @@ import { } from '../../services/finance/payments.js'; // list of payments -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listPaymentsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -63,37 +63,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listPaymentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getPaymentPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchPaymentsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newPaymentRouteHandler(req, res); }); // get payment stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getPaymentStatsRouteHandler(req, res); }); // get payment history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getPaymentHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getPaymentNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getPaymentRouteHandler(req, res); }); diff --git a/src/routes/finance/taxrecords.js b/src/routes/finance/taxrecords.js index e9a1264..2728bf8 100644 --- a/src/routes/finance/taxrecords.js +++ b/src/routes/finance/taxrecords.js @@ -30,15 +30,15 @@ import { } from '../../services/finance/taxrecords.js'; // list of tax records -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listTaxRecordsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -46,37 +46,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listTaxRecordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getTaxRecordPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchTaxRecordsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newTaxRecordRouteHandler(req, res); }); // get tax record stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getTaxRecordStatsRouteHandler(req, res); }); // get tax record history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getTaxRecordHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getTaxRecordNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getTaxRecordRouteHandler(req, res); }); diff --git a/src/routes/inventory/filamentstocks.js b/src/routes/inventory/filamentstocks.js index 85638ca..8cfefe5 100644 --- a/src/routes/inventory/filamentstocks.js +++ b/src/routes/inventory/filamentstocks.js @@ -42,15 +42,15 @@ import { } from '../../services/inventory/filamentstocks.js'; // list of filament stocks -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listFilamentStocksRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -58,37 +58,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listFilamentStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getFilamentStockPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchFilamentStocksRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newFilamentStockRouteHandler(req, res); }); // get filament stock stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getFilamentStockStatsRouteHandler(req, res); }); // get filament stock history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getFilamentStockHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getFilamentStockNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getFilamentStockRouteHandler(req, res); }); diff --git a/src/routes/inventory/orderitems.js b/src/routes/inventory/orderitems.js index 11a7a50..c32d228 100644 --- a/src/routes/inventory/orderitems.js +++ b/src/routes/inventory/orderitems.js @@ -47,15 +47,15 @@ import { } from '../../services/inventory/orderitems.js'; // list of order items -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listOrderItemsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -63,37 +63,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listOrderItemsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getOrderItemPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchOrderItemsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newOrderItemRouteHandler(req, res); }); // get order item stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getOrderItemStatsRouteHandler(req, res); }); // get order item history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getOrderItemHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getOrderItemNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getOrderItemRouteHandler(req, res); }); diff --git a/src/routes/inventory/partstocks.js b/src/routes/inventory/partstocks.js index 52fdd5c..47b0703 100644 --- a/src/routes/inventory/partstocks.js +++ b/src/routes/inventory/partstocks.js @@ -34,15 +34,15 @@ import { } from '../../services/inventory/partstocks.js'; // list of part stocks -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listPartStocksRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -50,37 +50,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listPartStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getPartStockPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchPartStocksRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newPartStockRouteHandler(req, res); }); // get part stock stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getPartStockStatsRouteHandler(req, res); }); // get part stock history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getPartStockHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getPartStockNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getPartStockRouteHandler(req, res); }); diff --git a/src/routes/inventory/productstocks.js b/src/routes/inventory/productstocks.js index f8c2034..4be28d0 100644 --- a/src/routes/inventory/productstocks.js +++ b/src/routes/inventory/productstocks.js @@ -33,15 +33,15 @@ import { getProductStockNeighborsRouteHandler } from '../../services/inventory/productstocks.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listProductStocksRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -49,35 +49,35 @@ router.get('/properties', isAuthenticated, (req, res) => { listProductStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getProductStockPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchProductStocksRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newProductStockRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getProductStockStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getProductStockHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getProductStockNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getProductStockRouteHandler(req, res); }); diff --git a/src/routes/inventory/purchaseorders.js b/src/routes/inventory/purchaseorders.js index 52c74e4..e0216e9 100644 --- a/src/routes/inventory/purchaseorders.js +++ b/src/routes/inventory/purchaseorders.js @@ -50,52 +50,52 @@ import { } from '../../services/inventory/purchaseorders.js'; // list of purchase orders -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listPurchaseOrdersRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { - masterFilter = getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true); + masterFilter = await getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true); } listPurchaseOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getPurchaseOrderPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchPurchaseOrdersRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newPurchaseOrderRouteHandler(req, res); }); // get purchase order stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getPurchaseOrderStatsRouteHandler(req, res); }); // get purchase order history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getPurchaseOrderHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getPurchaseOrderNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getPurchaseOrderRouteHandler(req, res); }); diff --git a/src/routes/inventory/shipments.js b/src/routes/inventory/shipments.js index 3d3a276..6d5deae 100644 --- a/src/routes/inventory/shipments.js +++ b/src/routes/inventory/shipments.js @@ -42,52 +42,52 @@ import { } from '../../services/inventory/shipments.js'; // list of shipments -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listShipmentsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { - masterFilter = getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true); + masterFilter = await getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true); } listShipmentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getShipmentPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchShipmentsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newShipmentRouteHandler(req, res); }); // get shipment stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getShipmentStatsRouteHandler(req, res); }); // get shipment history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getShipmentHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getShipmentNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getShipmentRouteHandler(req, res); }); diff --git a/src/routes/inventory/stockaudits.js b/src/routes/inventory/stockaudits.js index a4c6e3d..b1c1a25 100644 --- a/src/routes/inventory/stockaudits.js +++ b/src/routes/inventory/stockaudits.js @@ -26,7 +26,7 @@ const listAllowedFilters = [ ]; // List stock audits -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property } = req.query; var filter = {}; @@ -34,7 +34,7 @@ router.get('/', isAuthenticated, (req, res) => { for (const [key, value] of Object.entries(req.query)) { for (var i = 0; i < listAllowedFilters.length; i++) { if (key == listAllowedFilters[i]) { - const parsedFilter = parseFilter(key, value); + const parsedFilter = await parseFilter(key, value); filter = { ...filter, ...parsedFilter }; } } @@ -44,43 +44,43 @@ router.get('/', isAuthenticated, (req, res) => { }); // Create new stock audit -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newStockAuditRouteHandler(req, res); }); // get stock audit stats -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchStockAuditsRouteHandler(req, res, search); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getStockAuditStatsRouteHandler(req, res); }); // get stock audit history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getStockAuditHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getStockAuditNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); // Get specific stock audit -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getStockAuditRouteHandler(req, res); }); // Update stock audit -router.put('/:id', isAuthenticated, (req, res) => { +router.put('/:id', isAuthenticated, async (req, res) => { updateStockAuditRouteHandler(req, res); }); // Delete stock audit -router.delete('/:id', isAuthenticated, (req, res) => { +router.delete('/:id', isAuthenticated, async (req, res) => { deleteStockAuditRouteHandler(req, res); }); diff --git a/src/routes/inventory/stockevents.js b/src/routes/inventory/stockevents.js index dbc2137..e7c4bc0 100644 --- a/src/routes/inventory/stockevents.js +++ b/src/routes/inventory/stockevents.js @@ -29,15 +29,15 @@ import { } from '../../services/inventory/stockevents.js'; // list of stock events -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listStockEventsRouteHandler(req, res, page, limit, filter, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -45,37 +45,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listStockEventsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getStockEventPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchStockEventsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newStockEventRouteHandler(req, res); }); // get stock event stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getStockEventStatsRouteHandler(req, res); }); // get stock event history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getStockEventHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getStockEventNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getStockEventRouteHandler(req, res); }); diff --git a/src/routes/inventory/stocklocations.js b/src/routes/inventory/stocklocations.js index 1402b72..f7640ae 100644 --- a/src/routes/inventory/stocklocations.js +++ b/src/routes/inventory/stocklocations.js @@ -22,15 +22,15 @@ import { getStockLocationNeighborsRouteHandler } from '../../services/inventory/stocklocations.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listStockLocationsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -38,35 +38,35 @@ router.get('/properties', isAuthenticated, (req, res) => { listStockLocationsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getStockLocationPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchStockLocationsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newStockLocationRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getStockLocationStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getStockLocationHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getStockLocationNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getStockLocationRouteHandler(req, res); }); diff --git a/src/routes/inventory/stocktransfers.js b/src/routes/inventory/stocktransfers.js index 583d45f..b400f90 100644 --- a/src/routes/inventory/stocktransfers.js +++ b/src/routes/inventory/stocktransfers.js @@ -31,15 +31,15 @@ import { getStockTransferNeighborsRouteHandler } from '../../services/inventory/stocktransfers.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listStockTransfersRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -47,35 +47,35 @@ router.get('/properties', isAuthenticated, (req, res) => { listStockTransfersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getStockTransferPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchStockTransfersRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newStockTransferRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getStockTransferStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getStockTransferHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getStockTransferNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getStockTransferRouteHandler(req, res); }); diff --git a/src/routes/management/apppasswords.js b/src/routes/management/apppasswords.js index 34aac07..1434e88 100644 --- a/src/routes/management/apppasswords.js +++ b/src/routes/management/apppasswords.js @@ -31,38 +31,38 @@ import { getAppPasswordNeighborsRouteHandler } from '../../services/management/apppasswords.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listAppPasswordsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { const properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); const masterFilter = req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}; listAppPasswordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getAppPasswordPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchAppPasswordsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newAppPasswordRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getAppPasswordStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getAppPasswordHistoryRouteHandler(req, res); }); @@ -70,13 +70,13 @@ router.post('/:id/regenerateSecret', isAuthenticated, async (req, res) => { regenerateSecretRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getAppPasswordNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getAppPasswordRouteHandler(req, res); }); diff --git a/src/routes/management/auditlogs.js b/src/routes/management/auditlogs.js index a9b6c9d..584e2ae 100644 --- a/src/routes/management/auditlogs.js +++ b/src/routes/management/auditlogs.js @@ -29,7 +29,7 @@ router.get('/', isAuthenticated, async (req, res) => { for (const [key, value] of Object.entries(req.query)) { for (var i = 0; i < allowedFilters.length; i++) { if (key == allowedFilters[i]) { - const parsedFilter = parseFilter(key, value); + const parsedFilter = await parseFilter(key, value); filter = { ...filter, ...parsedFilter }; } } @@ -38,17 +38,17 @@ router.get('/', isAuthenticated, async (req, res) => { }); // get audit log stats -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchAuditLogsRouteHandler(req, res, search); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getAuditLogStatsRouteHandler(req, res); }); // get audit log history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getAuditLogHistoryRouteHandler(req, res); }); diff --git a/src/routes/management/courier.js b/src/routes/management/courier.js index b031aa7..33cf884 100644 --- a/src/routes/management/courier.js +++ b/src/routes/management/courier.js @@ -32,15 +32,15 @@ import { } from '../../services/management/courier.js'; // list of couriers -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listCouriersRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -48,37 +48,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listCouriersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getCourierPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchCouriersRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newCourierRouteHandler(req, res); }); // get courier stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getCourierStatsRouteHandler(req, res); }); // get courier history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getCourierHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getCourierNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getCourierRouteHandler(req, res); }); diff --git a/src/routes/management/courierservice.js b/src/routes/management/courierservice.js index be5c8ac..434ca79 100644 --- a/src/routes/management/courierservice.js +++ b/src/routes/management/courierservice.js @@ -45,15 +45,15 @@ import { } from '../../services/management/courierservice.js'; // list of courier services -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listCourierServicesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -61,37 +61,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listCourierServicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getCourierServicePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchCourierServicesRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newCourierServiceRouteHandler(req, res); }); // get courier service stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getCourierServiceStatsRouteHandler(req, res); }); // get courierservice history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getCourierServiceHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getCourierServiceNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getCourierServiceRouteHandler(req, res); }); diff --git a/src/routes/management/documentjobs.js b/src/routes/management/documentjobs.js index ade47c4..2ac6d13 100644 --- a/src/routes/management/documentjobs.js +++ b/src/routes/management/documentjobs.js @@ -30,15 +30,15 @@ import { } from '../../services/management/documentjobs.js'; // list of document jobs -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listDocumentJobsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -46,37 +46,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listDocumentJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getDocumentJobPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchDocumentJobsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newDocumentJobRouteHandler(req, res); }); // get document job stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getDocumentJobStatsRouteHandler(req, res); }); // get documentjobs history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getDocumentJobHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getDocumentJobNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getDocumentJobRouteHandler(req, res); }); diff --git a/src/routes/management/documentprinters.js b/src/routes/management/documentprinters.js index 4619d57..3d84266 100644 --- a/src/routes/management/documentprinters.js +++ b/src/routes/management/documentprinters.js @@ -31,15 +31,15 @@ import { } from '../../services/management/documentprinters.js'; // list of document printers -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listDocumentPrintersRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -47,37 +47,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listDocumentPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getDocumentPrinterPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchDocumentPrintersRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newDocumentPrinterRouteHandler(req, res); }); // get document printer stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getDocumentPrinterStatsRouteHandler(req, res); }); // get documentprinters history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getDocumentPrinterHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getDocumentPrinterNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getDocumentPrinterRouteHandler(req, res); }); diff --git a/src/routes/management/documentsizes.js b/src/routes/management/documentsizes.js index 641c5a1..6a77ea9 100644 --- a/src/routes/management/documentsizes.js +++ b/src/routes/management/documentsizes.js @@ -29,15 +29,15 @@ import { } from '../../services/management/documentsizes.js'; // list of document sizes -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listDocumentSizesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -45,37 +45,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listDocumentSizesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getDocumentSizePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchDocumentSizesRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newDocumentSizeRouteHandler(req, res); }); // get document size stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getDocumentSizeStatsRouteHandler(req, res); }); // get documentsizes history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getDocumentSizeHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getDocumentSizeNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getDocumentSizeRouteHandler(req, res); }); diff --git a/src/routes/management/documenttemplates.js b/src/routes/management/documenttemplates.js index 2357edc..6448f1c 100644 --- a/src/routes/management/documenttemplates.js +++ b/src/routes/management/documenttemplates.js @@ -30,15 +30,15 @@ import { } from '../../services/management/documenttemplates.js'; // list of document templates -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listDocumentTemplatesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -46,37 +46,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listDocumentTemplatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getDocumentTemplatePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchDocumentTemplatesRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newDocumentTemplateRouteHandler(req, res); }); // get document template stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getDocumentTemplateStatsRouteHandler(req, res); }); // get document template history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getDocumentTemplateHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getDocumentTemplateNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getDocumentTemplateRouteHandler(req, res); }); diff --git a/src/routes/management/filaments.js b/src/routes/management/filaments.js index 0a784c9..b32a75e 100644 --- a/src/routes/management/filaments.js +++ b/src/routes/management/filaments.js @@ -33,7 +33,7 @@ import { } from '../../services/management/filaments.js'; // list of filaments -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; @@ -42,7 +42,7 @@ router.get('/', isAuthenticated, (req, res) => { for (const [key, value] of Object.entries(req.query)) { for (var i = 0; i < listAllowedFilters.length; i++) { if (key == listAllowedFilters[i]) { - filter = { ...filter, ...parseFilter(key, value) }; + filter = { ...filter, ...(await parseFilter(key, value)) }; } } } @@ -50,9 +50,9 @@ router.get('/', isAuthenticated, (req, res) => { listFilamentsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -60,37 +60,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listFilamentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getFilamentPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchFilamentsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newFilamentRouteHandler(req, res); }); // get filament stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getFilamentStatsRouteHandler(req, res); }); // get filaments history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getFilamentHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getFilamentNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getFilamentRouteHandler(req, res); }); diff --git a/src/routes/management/filamentskus.js b/src/routes/management/filamentskus.js index 32422a1..b5fe72a 100644 --- a/src/routes/management/filamentskus.js +++ b/src/routes/management/filamentskus.js @@ -32,15 +32,15 @@ import { getFilamentSkuNeighborsRouteHandler, } from '../../services/management/filamentskus.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listFilamentSkusRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); let masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -48,34 +48,34 @@ router.get('/properties', isAuthenticated, (req, res) => { listFilamentSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getFilamentSkuPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchFilamentSkusRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newFilamentSkuRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getFilamentSkuStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getFilamentSkuHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getFilamentSkuNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getFilamentSkuRouteHandler(req, res); }); diff --git a/src/routes/management/files.js b/src/routes/management/files.js index ce86b80..b9c9a9f 100644 --- a/src/routes/management/files.js +++ b/src/routes/management/files.js @@ -34,15 +34,15 @@ import { } from '../../services/management/files.js'; // list of files -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listFilesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -50,49 +50,49 @@ router.get('/properties', isAuthenticated, (req, res) => { listFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getFilePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchFilesRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newFileRouteHandler(req, res); }); // get file stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getFileStatsRouteHandler(req, res); }); // get file history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getFileHistoryRouteHandler(req, res); }); -router.delete('/:id/flush', isAuthenticated, (req, res) => { +router.delete('/:id/flush', isAuthenticated, async (req, res) => { flushFileRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getFileNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getFileRouteHandler(req, res); }); -router.get('/:id/content', isAuthenticated, (req, res) => { +router.get('/:id/content', isAuthenticated, async (req, res) => { getFileContentRouteHandler(req, res); }); -router.get('/:id/thumbnail', isAuthenticated, (req, res) => { +router.get('/:id/thumbnail', isAuthenticated, async (req, res) => { getFileThumbnailRouteHandler(req, res); }); diff --git a/src/routes/management/hosts.js b/src/routes/management/hosts.js index 116e3f6..9358e21 100644 --- a/src/routes/management/hosts.js +++ b/src/routes/management/hosts.js @@ -29,15 +29,15 @@ import { } from '../../services/management/hosts.js'; // list of hosts -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listHostsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -45,37 +45,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listHostsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getHostPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchHostsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newHostRouteHandler(req, res); }); // get host stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getHostStatsRouteHandler(req, res); }); // get hosts history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getHostHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getHostNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getHostRouteHandler(req, res); }); diff --git a/src/routes/management/materials.js b/src/routes/management/materials.js index 672aad4..4616f7c 100644 --- a/src/routes/management/materials.js +++ b/src/routes/management/materials.js @@ -28,7 +28,7 @@ import { } from '../../services/management/materials.js'; // list of materials -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; @@ -36,16 +36,16 @@ router.get('/', isAuthenticated, (req, res) => { for (const [key, value] of Object.entries(req.query)) { if (listAllowedFilters.includes(key)) { - filter = { ...filter, ...parseFilter(key, value) }; + filter = { ...filter, ...(await parseFilter(key, value)) }; } } listMaterialsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -53,37 +53,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listMaterialsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getMaterialPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchMaterialsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newMaterialRouteHandler(req, res); }); // get material stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getMaterialStatsRouteHandler(req, res); }); // get materials history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getMaterialHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getMaterialNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getMaterialRouteHandler(req, res); }); diff --git a/src/routes/management/notetypes.js b/src/routes/management/notetypes.js index d191e26..7cf2e27 100644 --- a/src/routes/management/notetypes.js +++ b/src/routes/management/notetypes.js @@ -30,15 +30,15 @@ import { } from '../../services/management/notetypes.js'; // list of note types -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listNoteTypesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -46,37 +46,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listNoteTypesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getNoteTypePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchNoteTypesRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newNoteTypeRouteHandler(req, res); }); // get note type stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getNoteTypeStatsRouteHandler(req, res); }); // get notetypes history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getNoteTypeHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getNoteTypeNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getNoteTypeRouteHandler(req, res); }); diff --git a/src/routes/management/parts.js b/src/routes/management/parts.js index 4507e42..c55e9aa 100644 --- a/src/routes/management/parts.js +++ b/src/routes/management/parts.js @@ -29,15 +29,15 @@ import { } from '../../services/management/parts.js'; // list of parts -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listPartsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -45,37 +45,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listPartsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getPartPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchPartsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newPartRouteHandler(req, res); }); // get part stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getPartStatsRouteHandler(req, res); }); // get parts history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getPartHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getPartNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getPartRouteHandler(req, res); }); diff --git a/src/routes/management/partskus.js b/src/routes/management/partskus.js index 5d61699..2dfc7f8 100644 --- a/src/routes/management/partskus.js +++ b/src/routes/management/partskus.js @@ -32,15 +32,15 @@ import { getPartSkuNeighborsRouteHandler } from '../../services/management/partskus.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listPartSkusRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); let masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -48,35 +48,35 @@ router.get('/properties', isAuthenticated, (req, res) => { listPartSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getPartSkuPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchPartSkusRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newPartSkuRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getPartSkuStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getPartSkuHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getPartSkuNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getPartSkuRouteHandler(req, res); }); diff --git a/src/routes/management/productcategories.js b/src/routes/management/productcategories.js index b539190..0fcc505 100644 --- a/src/routes/management/productcategories.js +++ b/src/routes/management/productcategories.js @@ -21,15 +21,15 @@ const router = express.Router(); const listAllowedFilters = ['_id','name','createdAt','updatedAt','_reference']; const propertiesAllowedFilters = ['name']; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listProductCategoriesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { const properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -37,35 +37,35 @@ router.get('/properties', isAuthenticated, (req, res) => { listProductCategoriesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getProductCategoryPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchProductCategoriesRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newProductCategoryRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getProductCategoryStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getProductCategoryHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getProductCategoryNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getProductCategoryRouteHandler(req, res); }); diff --git a/src/routes/management/products.js b/src/routes/management/products.js index eb6bebb..8c830cf 100644 --- a/src/routes/management/products.js +++ b/src/routes/management/products.js @@ -31,15 +31,15 @@ import { } from '../../services/management/products.js'; // list of products -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listProductsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -47,37 +47,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listProductsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getProductPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchProductsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newProductRouteHandler(req, res); }); // get product stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getProductStatsRouteHandler(req, res); }); // get products history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getProductHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getProductNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getProductRouteHandler(req, res); }); diff --git a/src/routes/management/productskus.js b/src/routes/management/productskus.js index 4b51e6f..e5cb3b0 100644 --- a/src/routes/management/productskus.js +++ b/src/routes/management/productskus.js @@ -32,15 +32,15 @@ import { getProductSkuNeighborsRouteHandler } from '../../services/management/productskus.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listProductSkusRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); let masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -48,35 +48,35 @@ router.get('/properties', isAuthenticated, (req, res) => { listProductSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getProductSkuPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchProductSkusRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newProductSkuRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getProductSkuStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getProductSkuHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getProductSkuNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getProductSkuRouteHandler(req, res); }); diff --git a/src/routes/management/taxrates.js b/src/routes/management/taxrates.js index 603c7d3..f247f20 100644 --- a/src/routes/management/taxrates.js +++ b/src/routes/management/taxrates.js @@ -31,15 +31,15 @@ import { } from '../../services/management/taxrates.js'; // list of tax rates -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listTaxRatesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -47,37 +47,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listTaxRatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getTaxRatePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchTaxRatesRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newTaxRateRouteHandler(req, res); }); // get tax rate stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getTaxRateStatsRouteHandler(req, res); }); // get tax rate history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getTaxRateHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getTaxRateNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getTaxRateRouteHandler(req, res); }); diff --git a/src/routes/management/users.js b/src/routes/management/users.js index 1be139d..baeb3f2 100644 --- a/src/routes/management/users.js +++ b/src/routes/management/users.js @@ -30,15 +30,15 @@ import { } from '../../services/management/users.js'; // list of document templates -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listUsersRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -46,33 +46,33 @@ router.get('/properties', isAuthenticated, (req, res) => { listUsersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getUserPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchUsersRouteHandler(req, res, search); }); // get user stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getUserStatsRouteHandler(req, res); }); // get user history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getUserHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getUserNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getUserRouteHandler(req, res); }); diff --git a/src/routes/management/vendors.js b/src/routes/management/vendors.js index 7bfd9b0..9162d79 100644 --- a/src/routes/management/vendors.js +++ b/src/routes/management/vendors.js @@ -29,15 +29,15 @@ import { } from '../../services/management/vendors.js'; // list of vendors -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listVendorsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -45,37 +45,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listVendorsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getVendorPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchVendorsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newVendorRouteHandler(req, res); }); // get vendor stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getVendorStatsRouteHandler(req, res); }); // get vendors history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getVendorHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getVendorNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getVendorRouteHandler(req, res); }); diff --git a/src/routes/misc/notes.js b/src/routes/misc/notes.js index 0c89135..fa388ac 100644 --- a/src/routes/misc/notes.js +++ b/src/routes/misc/notes.js @@ -26,15 +26,15 @@ const listAllowedFilters = [ const propertiesAllowedFilters = ['parent']; // list of notes -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listNotesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -42,33 +42,33 @@ router.get('/properties', isAuthenticated, (req, res) => { listNotesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getNotePropertyValuesRouteHandler(req, res, property); }); // create new note -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newNoteRouteHandler(req, res); }); // get note stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getNoteStatsRouteHandler(req, res); }); // get note history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getNoteHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getNoteNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getNoteRouteHandler(req, res); }); diff --git a/src/routes/misc/notifications.js b/src/routes/misc/notifications.js index 3eb9ffb..c0f571a 100644 --- a/src/routes/misc/notifications.js +++ b/src/routes/misc/notifications.js @@ -11,26 +11,26 @@ import { getFilter } from '../../utils.js'; const router = express.Router(); -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page = 1, limit = 50, sort = 'createdAt', order = 'descend' } = req.query; const allowedFilters = ['user']; - const filter = getFilter(req.query, allowedFilters); + const filter = await getFilter(req.query, allowedFilters); listNotificationsRouteHandler(req, res, page, limit, filter, sort, order); }); -router.put('/read-all', isAuthenticated, (req, res) => { +router.put('/read-all', isAuthenticated, async (req, res) => { markAllNotificationsAsReadRouteHandler(req, res); }); -router.put('/:id/read', isAuthenticated, (req, res) => { +router.put('/:id/read', isAuthenticated, async (req, res) => { markNotificationAsReadRouteHandler(req, res); }); -router.delete('/', isAuthenticated, (req, res) => { +router.delete('/', isAuthenticated, async (req, res) => { deleteAllNotificationsRouteHandler(req, res); }); -router.delete('/:id', isAuthenticated, (req, res) => { +router.delete('/:id', isAuthenticated, async (req, res) => { deleteNotificationRouteHandler(req, res); }); diff --git a/src/routes/misc/usernotifiers.js b/src/routes/misc/usernotifiers.js index 961849d..954f285 100644 --- a/src/routes/misc/usernotifiers.js +++ b/src/routes/misc/usernotifiers.js @@ -11,26 +11,26 @@ import { getFilter } from '../../utils.js'; const router = express.Router(); -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; const allowedFilters = ['user', 'object', 'objectType']; - const filter = getFilter(req.query, allowedFilters); + const filter = await getFilter(req.query, allowedFilters); listUserNotifiersRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newUserNotifierRouteHandler(req, res); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getUserNotifierRouteHandler(req, res); }); -router.put('/:id', isAuthenticated, (req, res) => { +router.put('/:id', isAuthenticated, async (req, res) => { editUserNotifierRouteHandler(req, res); }); -router.delete('/:id', isAuthenticated, (req, res) => { +router.delete('/:id', isAuthenticated, async (req, res) => { deleteUserNotifierRouteHandler(req, res); }); diff --git a/src/routes/production/filamentprofiles.js b/src/routes/production/filamentprofiles.js index 1194d65..c1bf29e 100644 --- a/src/routes/production/filamentprofiles.js +++ b/src/routes/production/filamentprofiles.js @@ -19,15 +19,15 @@ const router = express.Router(); const listAllowedFilters = ['_id','name','createdAt','updatedAt','_reference']; const propertiesAllowedFilters = ['name']; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listFilamentProfilesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { const properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -35,34 +35,34 @@ router.get('/properties', isAuthenticated, (req, res) => { listFilamentProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getFilamentProfilePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { searchFilamentProfilesRouteHandler(req, res, req.query.search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newFilamentProfileRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getFilamentProfileNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getFilamentProfileRouteHandler(req, res); }); -router.put('/:id', isAuthenticated, (req, res) => { +router.put('/:id', isAuthenticated, async (req, res) => { editFilamentProfileRouteHandler(req, res); }); -router.delete('/:id', isAuthenticated, (req, res) => { +router.delete('/:id', isAuthenticated, async (req, res) => { deleteFilamentProfileRouteHandler(req, res); }); diff --git a/src/routes/production/gcodefiles.js b/src/routes/production/gcodefiles.js index 7747011..69912a7 100644 --- a/src/routes/production/gcodefiles.js +++ b/src/routes/production/gcodefiles.js @@ -31,15 +31,15 @@ import { import { convertPropertiesString, getFilter } from '../../utils.js'; // list of gcodeFiles -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listGCodeFilesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -47,37 +47,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listGCodeFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getGCodeFilePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchGCodeFilesRouteHandler(req, res, search); }); // create new gcodeFile -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newGCodeFileRouteHandler(req, res); }); // get gcodeFile stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getGCodeFileStatsRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getGCodeFileNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getGCodeFileRouteHandler(req, res); }); -router.get('/:id/content', isAuthenticated, (req, res) => { +router.get('/:id/content', isAuthenticated, async (req, res) => { getGCodeFileContentRouteHandler(req, res); }); diff --git a/src/routes/production/jobs.js b/src/routes/production/jobs.js index 16681cc..f6d447a 100644 --- a/src/routes/production/jobs.js +++ b/src/routes/production/jobs.js @@ -29,15 +29,15 @@ import { import { convertPropertiesString, getFilter } from '../../utils.js'; // list of jobs -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listJobsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -45,36 +45,36 @@ router.get('/properties', isAuthenticated, (req, res) => { listJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getJobPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchJobsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newJobRouteHandler(req, res); }); // get job stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getJobStatsRouteHandler(req, res); }); // get job history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getJobHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getJobNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getJobRouteHandler(req, res); }); diff --git a/src/routes/production/printerprofiles.js b/src/routes/production/printerprofiles.js index 62b3e6d..a4baa45 100644 --- a/src/routes/production/printerprofiles.js +++ b/src/routes/production/printerprofiles.js @@ -19,15 +19,15 @@ const router = express.Router(); const listAllowedFilters = ['_id','name','createdAt','updatedAt','_reference']; const propertiesAllowedFilters = ['name']; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listPrinterProfilesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { const properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -35,34 +35,34 @@ router.get('/properties', isAuthenticated, (req, res) => { listPrinterProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getPrinterProfilePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { searchPrinterProfilesRouteHandler(req, res, req.query.search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newPrinterProfileRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getPrinterProfileNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getPrinterProfileRouteHandler(req, res); }); -router.put('/:id', isAuthenticated, (req, res) => { +router.put('/:id', isAuthenticated, async (req, res) => { editPrinterProfileRouteHandler(req, res); }); -router.delete('/:id', isAuthenticated, (req, res) => { +router.delete('/:id', isAuthenticated, async (req, res) => { deletePrinterProfileRouteHandler(req, res); }); diff --git a/src/routes/production/printers.js b/src/routes/production/printers.js index 9f10f66..0e185d2 100644 --- a/src/routes/production/printers.js +++ b/src/routes/production/printers.js @@ -30,15 +30,15 @@ const listAllowedFilters = [ ]; const propertiesAllowedFilters = ['tags']; // list of printers -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listPrintersRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -46,37 +46,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getPrinterPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchPrintersRouteHandler(req, res, search); }); // create new printer -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newPrinterRouteHandler(req, res); }); // get printer history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getPrinterHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getPrinterNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); // get printer stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getPrinterStatsRouteHandler(req, res); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getPrinterRouteHandler(req, res); }); diff --git a/src/routes/production/subjobs.js b/src/routes/production/subjobs.js index 84ccec7..b2e1934 100644 --- a/src/routes/production/subjobs.js +++ b/src/routes/production/subjobs.js @@ -26,15 +26,15 @@ import { import { getFilter, convertPropertiesString } from '../../utils.js'; // list of sub jobs -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listSubJobsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -42,32 +42,32 @@ router.get('/properties', isAuthenticated, (req, res) => { listSubJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getSubJobPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchSubJobsRouteHandler(req, res, search); }); // get sub job stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getSubJobStatsRouteHandler(req, res); }); // get sub job history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getSubJobHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getSubJobNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getSubJobRouteHandler(req, res); }); diff --git a/src/routes/sales/clients.js b/src/routes/sales/clients.js index adcd84b..27aef36 100644 --- a/src/routes/sales/clients.js +++ b/src/routes/sales/clients.js @@ -29,15 +29,15 @@ import { } from '../../services/sales/clients.js'; // list of clients -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listClientsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -45,37 +45,37 @@ router.get('/properties', isAuthenticated, (req, res) => { listClientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getClientPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchClientsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newClientRouteHandler(req, res); }); // get client stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getClientStatsRouteHandler(req, res); }); // get clients history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getClientHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getClientNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getClientRouteHandler(req, res); }); diff --git a/src/routes/sales/listings.js b/src/routes/sales/listings.js index 24bede1..8955c0e 100644 --- a/src/routes/sales/listings.js +++ b/src/routes/sales/listings.js @@ -44,15 +44,15 @@ import { getListingNeighborsRouteHandler } from '../../services/sales/listings.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listListingsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -60,42 +60,42 @@ router.get('/properties', isAuthenticated, (req, res) => { listListingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getListingPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchListingsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newListingRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getListingStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getListingHistoryRouteHandler(req, res); }); -router.post('/:id/publish', isAuthenticated, (req, res) => { +router.post('/:id/publish', isAuthenticated, async (req, res) => { publishListingRouteHandler(req, res); }); -router.post('/:id/unpublish', isAuthenticated, (req, res) => { +router.post('/:id/unpublish', isAuthenticated, async (req, res) => { unpublishListingRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getListingNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getListingRouteHandler(req, res); }); diff --git a/src/routes/sales/listingvarients.js b/src/routes/sales/listingvarients.js index 996377a..fa6e2e5 100644 --- a/src/routes/sales/listingvarients.js +++ b/src/routes/sales/listingvarients.js @@ -42,15 +42,15 @@ import { getListingVarientNeighborsRouteHandler } from '../../services/sales/listingvarients.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listListingVarientsRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -58,43 +58,43 @@ router.get('/properties', isAuthenticated, (req, res) => { listListingVarientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getListingVarientPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchListingVarientsRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newListingVarientRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getListingVarientStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getListingVarientHistoryRouteHandler(req, res); }); -router.post('/:id/publish', isAuthenticated, (req, res) => { +router.post('/:id/publish', isAuthenticated, async (req, res) => { publishListingVarientRouteHandler(req, res); }); -router.post('/:id/unpublish', isAuthenticated, (req, res) => { +router.post('/:id/unpublish', isAuthenticated, async (req, res) => { unpublishListingVarientRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getListingVarientNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getListingVarientRouteHandler(req, res); }); diff --git a/src/routes/sales/marketplaces.js b/src/routes/sales/marketplaces.js index 0a7604c..b0d1189 100644 --- a/src/routes/sales/marketplaces.js +++ b/src/routes/sales/marketplaces.js @@ -37,15 +37,15 @@ import { getMarketplaceNeighborsRouteHandler } from '../../services/sales/marketplaces.js'; -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listMarketplacesRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { masterFilter = JSON.parse(req.query.masterFilter); @@ -53,60 +53,60 @@ router.get('/properties', isAuthenticated, (req, res) => { listMarketplacesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getMarketplacePropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchMarketplacesRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newMarketplaceRouteHandler(req, res); }); -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getMarketplaceStatsRouteHandler(req, res); }); -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getMarketplaceHistoryRouteHandler(req, res); }); -router.get('/:id/auth/url', isAuthenticated, (req, res) => { +router.get('/:id/auth/url', isAuthenticated, async (req, res) => { getMarketplaceAuthUrlRouteHandler(req, res); }); -router.post('/:id/auth/exchange', isAuthenticated, (req, res) => { +router.post('/:id/auth/exchange', isAuthenticated, async (req, res) => { exchangeMarketplaceAuthCodeRouteHandler(req, res); }); -router.post('/:id/auth/refresh', isAuthenticated, (req, res) => { +router.post('/:id/auth/refresh', isAuthenticated, async (req, res) => { refreshMarketplaceAuthRouteHandler(req, res); }); -router.post('/:id/sync/items', isAuthenticated, (req, res) => { +router.post('/:id/sync/items', isAuthenticated, async (req, res) => { syncMarketplaceItemsRouteHandler(req, res); }); -router.post('/:id/sync/orders', isAuthenticated, (req, res) => { +router.post('/:id/sync/orders', isAuthenticated, async (req, res) => { syncMarketplaceOrdersRouteHandler(req, res); }); // Webhook endpoint — no auth, provider verifies via signature -router.post('/:id/hook', (req, res) => { +router.post('/:id/hook', async (req, res) => { marketplaceWebhookRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getMarketplaceNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getMarketplaceRouteHandler(req, res); }); diff --git a/src/routes/sales/salesorders.js b/src/routes/sales/salesorders.js index 23772bf..2d22208 100644 --- a/src/routes/sales/salesorders.js +++ b/src/routes/sales/salesorders.js @@ -33,52 +33,52 @@ import { } from '../../services/sales/salesorders.js'; // list of sales orders -router.get('/', isAuthenticated, (req, res) => { +router.get('/', isAuthenticated, async (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); listSalesOrdersRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); -router.get('/properties', isAuthenticated, (req, res) => { +router.get('/properties', isAuthenticated, async (req, res) => { let properties = convertPropertiesString(req.query.properties); - const filter = getFilter(req.query, propertiesAllowedFilters, false); + const filter = await getFilter(req.query, propertiesAllowedFilters, false); var masterFilter = {}; if (req.query.masterFilter) { - masterFilter = getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true); + masterFilter = await getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true); } listSalesOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); }); -router.get('/values', isAuthenticated, (req, res) => { +router.get('/values', isAuthenticated, async (req, res) => { const { property } = req.query; getSalesOrderPropertyValuesRouteHandler(req, res, property); }); -router.get('/search', isAuthenticated, (req, res) => { +router.get('/search', isAuthenticated, async (req, res) => { const { search } = req.query; searchSalesOrdersRouteHandler(req, res, search); }); -router.post('/', isAuthenticated, (req, res) => { +router.post('/', isAuthenticated, async (req, res) => { newSalesOrderRouteHandler(req, res); }); // get sales order stats -router.get('/stats', isAuthenticated, (req, res) => { +router.get('/stats', isAuthenticated, async (req, res) => { getSalesOrderStatsRouteHandler(req, res); }); // get sales orders history -router.get('/history', isAuthenticated, (req, res) => { +router.get('/history', isAuthenticated, async (req, res) => { getSalesOrderHistoryRouteHandler(req, res); }); -router.get('/neighbors', isAuthenticated, (req, res) => { +router.get('/neighbors', isAuthenticated, async (req, res) => { const { property, search, sort, order, id } = req.query; - const filter = getFilter(req.query, listAllowedFilters); + const filter = await getFilter(req.query, listAllowedFilters); getSalesOrderNeighborsRouteHandler(req, res, property, filter, search, sort, order, id); }); -router.get('/:id', isAuthenticated, (req, res) => { +router.get('/:id', isAuthenticated, async (req, res) => { getSalesOrderRouteHandler(req, res); }); diff --git a/src/services/misc/csv.js b/src/services/misc/csv.js index 2255e46..682c604 100644 --- a/src/services/misc/csv.js +++ b/src/services/misc/csv.js @@ -74,7 +74,7 @@ export async function exportToCsv({ objectType, filter = {}, sort, order, limit export const csvExportRouteHandler = async (req, res) => { const objectType = req.params.objectType; const allowedFilters = getModelFilterFields(objectType); - const filter = getFilter(req.query, allowedFilters); + const filter = await getFilter(req.query, allowedFilters); const { sort, order } = parseOrderBy(req.query.$orderby); const result = await exportToCsv({ diff --git a/src/services/misc/excel.js b/src/services/misc/excel.js index 070d082..d638084 100644 --- a/src/services/misc/excel.js +++ b/src/services/misc/excel.js @@ -83,7 +83,7 @@ export async function exportToExcel({ objectType, filter = {}, sort, order, limi export const excelExportRouteHandler = async (req, res) => { const objectType = req.params.objectType; const allowedFilters = getModelFilterFields(objectType); - const filter = getFilter(req.query, allowedFilters); + const filter = await getFilter(req.query, allowedFilters); const { sort, order } = parseOrderBy(req.query.$orderby); const result = await exportToExcel({ @@ -113,7 +113,7 @@ export const excelOpenRouteHandler = async (req, res) => { const objectType = req.params.objectType; logger.info('[Excel Open] POST received', { objectType, query: req.query }); const allowedFilters = getModelFilterFields(objectType); - const filter = getFilter(req.query, allowedFilters); + const filter = await getFilter(req.query, allowedFilters); const { sort, order } = parseOrderBy(req.query.$orderby); const entry = getModelByName(objectType); diff --git a/src/services/misc/odata.js b/src/services/misc/odata.js index 2d49d22..75d4bc1 100644 --- a/src/services/misc/odata.js +++ b/src/services/misc/odata.js @@ -247,7 +247,7 @@ ${entitySets} * Route handler for GET /odata/$metadata * Returns OData 4.0 CSDL metadata document for Power BI / OData clients. */ -export const metadataODataRouteHandler = (req, res) => { +export const metadataODataRouteHandler = async (req, res) => { const xml = buildMetadataXml(); res.set('OData-Version', '4.0'); res.set('Content-Type', 'application/xml'); @@ -289,7 +289,7 @@ export const listODataRouteHandler = async (req, res) => { // Build filter from query params - allow common filter keys per model const allowedFilters = getModelFilterFields(objectType); - const filter = getFilter(req.query, allowedFilters); + const filter = await getFilter(req.query, allowedFilters); const result = await listObjectsOData({ model: entry.model, diff --git a/src/services/misc/rss.js b/src/services/misc/rss.js index fd0a99c..f7ab165 100644 --- a/src/services/misc/rss.js +++ b/src/services/misc/rss.js @@ -91,7 +91,7 @@ export const listRssRouteHandler = async (req, res) => { const page = Math.floor(skip / limit) + 1; const { sort, order } = parseOrderBy($orderby); const allowedFilters = getModelFilterFields(objectType); - const filter = getFilter(queryWithoutAuth, allowedFilters); + const filter = await getFilter(queryWithoutAuth, allowedFilters); const result = await listObjectsOData({ model: entry.model, diff --git a/src/utils.js b/src/utils.js index 037b69d..904c966 100644 --- a/src/utils.js +++ b/src/utils.js @@ -83,6 +83,108 @@ function isBooleanField(property, model = null) { return found; } +function isObjectIdPath(property) { + return property === '_id' || property.endsWith('._id'); +} + +function getBaseProperty(property) { + if (property === '_id') return '_id'; + if (property.endsWith('._id')) return property.slice(0, -4); + return property; +} + +function isObjectIdSchemaType(path) { + return path?.instance === 'ObjectId' || path?.instance === 'ObjectID'; +} + +function getSchemaPathFromModels(property, model = null) { + if (model?.schema?.path(property)) return model.schema.path(property); + for (const entry of Object.values(models)) { + const path = entry.model?.schema?.path(property); + if (path) return path; + } + return null; +} + +function getFilterFieldKind(property, model = null) { + const baseProperty = getBaseProperty(property); + + const inspectPath = (path) => { + if (!path) return null; + + if (isObjectIdPath(property) || isObjectIdSchemaType(path)) { + if (property.endsWith('._id') && property !== '_id' && path.options?.ref) { + return { kind: 'objectId', property: baseProperty }; + } + if (path.options?.ref) { + return { kind: 'objectRef', property: baseProperty, ref: path.options.ref }; + } + return { kind: 'objectId', property: baseProperty }; + } + + return { kind: 'default', property: baseProperty }; + }; + + if (model) { + return ( + inspectPath(model.schema?.path(baseProperty)) || { + kind: 'default', + property: baseProperty, + } + ); + } + + const path = getSchemaPathFromModels(baseProperty); + const kind = inspectPath(path); + if (kind) return kind; + + return { kind: 'default', property: baseProperty }; +} + +function parsePrefixedValue(value) { + const trimmed = String(value).trim(); + if (trimmed.length > 4 && trimmed.charAt(3) === ':') { + return { + prefix: trimmed.slice(0, 3).toUpperCase(), + suffix: trimmed.slice(4).trim(), + hadPrefix: true, + }; + } + return { prefix: null, suffix: trimmed, hadPrefix: false }; +} + +function buildRegexOp(pattern, useOptions = true) { + const op = { $regex: pattern }; + if (useOptions) op.$options = 'i'; + return op; +} + +function getSchemaRefName(property, model = null) { + const baseProperty = getBaseProperty(property); + const path = model?.schema?.path(baseProperty) ?? getSchemaPathFromModels(baseProperty); + return path?.options?.ref ?? path?.caster?.options?.ref ?? path?.path ?? null; +} + +function getRefModelEntryFromSchemaRef(refName) { + if (!refName) return null; + + let refModel; + try { + refModel = mongoose.model(refName); + } catch { + refModel = getModelByName(refName)?.model ?? null; + } + + if (!refModel) return null; + + const registryEntry = getModelByName(refName); + return { + model: refModel, + idField: registryEntry?.idField ?? '_id', + referenceField: registryEntry?.referenceField ?? '_reference', + }; +} + function parseBooleanOperand(value) { const lower = String(value).trim().toLowerCase(); if (lower === 'yes') return true; @@ -251,8 +353,14 @@ function stripIgnoreCase(str) { } // Builds an equality condition (value, date range, or wildcard regex). -function buildEquality(value, isDateField, isBooleanField = false) { +function buildEquality(value, isDateField, isBooleanField = false, isObjectIdField = false) { if (isBooleanField) return buildBooleanEquality(value); + if (isObjectIdField) { + const { suffix } = parsePrefixedValue(value); + if (/[*?]/.test(suffix)) return NO_MATCH_CONDITION; + if (isObjectIdString(suffix)) return { value: new mongoose.Types.ObjectId(suffix) }; + return NO_MATCH_CONDITION; + } if (isDateField) { const start = parseDateOperand(value, 'start'); const end = parseDateOperand(value, 'end'); @@ -263,12 +371,27 @@ function buildEquality(value, isDateField, isBooleanField = false) { if (lower === 'false') return { value: false }; if (isObjectIdString(value)) return { value: new mongoose.Types.ObjectId(value) }; if (isNumeric(value)) return { value: Number(value) }; - return { op: { $regex: buildWildcardRegexPattern(value), $options: 'i' } }; + return { op: buildRegexOp(buildWildcardRegexPattern(value)) }; } // Builds a comparison condition for a single operator. -function buildComparison(name, value, isDateField, isBooleanField = false) { +function buildComparison( + name, + value, + isDateField, + isBooleanField = false, + isObjectIdField = false +) { if (isBooleanField) return buildBooleanComparison(name, value); + if (isObjectIdField) { + const { suffix } = parsePrefixedValue(value); + if (/[*?]/.test(suffix)) return NO_MATCH_CONDITION; + if (name === 'eq') return buildEquality(suffix, false, false, true); + if (name === 'ne' && isObjectIdString(suffix)) { + return { op: { $ne: new mongoose.Types.ObjectId(suffix) } }; + } + return NO_MATCH_CONDITION; + } if (name === 'eq') return buildEquality(value, isDateField); if (name === 'ne') { @@ -278,7 +401,7 @@ function buildComparison(name, value, isDateField, isBooleanField = false) { if (start && end) return { op: { $not: { $gte: start, $lte: end } } }; } if (/[*?]/.test(value)) { - return { op: { $not: { $regex: buildWildcardRegexPattern(value), $options: 'i' } } }; + return { op: { $not: buildRegexOp(buildWildcardRegexPattern(value)) } }; } return { op: { $ne: coerceScalar(value) } }; } @@ -288,33 +411,7 @@ function buildComparison(name, value, isDateField, isBooleanField = false) { return { op: { [`$${name}`]: coerceBoundary(value, isDateField, boundary) } }; } -// Parses a leaf token (range, comparison, or plain value) into a condition. -function parseLeafCondition(rawToken, isDateField, isBooleanField = false) { - const token = rawToken.trim(); - if (token === '') { - if (isBooleanField) return NO_MATCH_CONDITION; - return { op: { $regex: '^$', $options: 'i' } }; - } - - // Interval: a..b, ..b, a.. - const rangeIdx = token.indexOf('..'); - if (rangeIdx !== -1) { - if (isBooleanField) { - const lo = stripIgnoreCase(token.slice(0, rangeIdx).trim()); - const hi = stripIgnoreCase(token.slice(rangeIdx + 2).trim()); - if (lo !== '' || hi !== '') return NO_MATCH_CONDITION; - } - const lo = stripIgnoreCase(token.slice(0, rangeIdx).trim()); - const hi = stripIgnoreCase(token.slice(rangeIdx + 2).trim()); - const op = {}; - if (lo !== '') op.$gte = coerceBoundary(lo, isDateField, 'start'); - if (hi !== '') op.$lte = coerceBoundary(hi, isDateField, 'end'); - // A bare ".." places no constraint on the field. - if (Object.keys(op).length === 0) return { query: {} }; - return { op }; - } - - // Comparison operators, longest symbols first. +function parseLeafComparisonOperators(token, isDateField, isBooleanField, isObjectIdField) { const operators = [ ['<>', 'ne'], ['>=', 'gte'], @@ -329,12 +426,50 @@ function parseLeafCondition(rawToken, isDateField, isBooleanField = false) { name, stripIgnoreCase(token.slice(symbol.length).trim()), isDateField, - isBooleanField + isBooleanField, + isObjectIdField ); } } + return null; +} - return buildEquality(stripIgnoreCase(token), isDateField, isBooleanField); +// Parses a leaf token (range, comparison, or plain value) into a condition. +function parseLeafCondition( + rawToken, + isDateField, + isBooleanField = false, + isObjectIdField = false +) { + const token = rawToken.trim(); + if (token === '') { + if (isBooleanField || isObjectIdField) return NO_MATCH_CONDITION; + return { op: buildRegexOp('^$') }; + } + + // Interval: a..b, ..b, a.. + const rangeIdx = token.indexOf('..'); + if (rangeIdx !== -1) { + if (isBooleanField || isObjectIdField) return NO_MATCH_CONDITION; + const lo = stripIgnoreCase(token.slice(0, rangeIdx).trim()); + const hi = stripIgnoreCase(token.slice(rangeIdx + 2).trim()); + const op = {}; + if (lo !== '') op.$gte = coerceBoundary(lo, isDateField, 'start'); + if (hi !== '') op.$lte = coerceBoundary(hi, isDateField, 'end'); + // A bare ".." places no constraint on the field. + if (Object.keys(op).length === 0) return { query: {} }; + return { op }; + } + + const comparison = parseLeafComparisonOperators( + token, + isDateField, + isBooleanField, + isObjectIdField + ); + if (comparison) return comparison; + + return buildEquality(stripIgnoreCase(token), isDateField, isBooleanField, isObjectIdField); } // Converts a condition descriptor into a MongoDB query object for `property`. @@ -365,57 +500,238 @@ function combineAnd(children, property) { } // Combines OR-ed conditions, collapsing to $in or a single regex when possible. -function combineOr(children, property) { +function combineOr(children, property, isObjectIdField = false) { if (children.every((child) => child.value !== undefined)) { return { op: { $in: children.map((child) => child.value) } }; } - if (children.every((child) => child.op && isOnlyRegex(child.op))) { + if (!isObjectIdField && children.every((child) => child.op && isOnlyRegex(child.op))) { const pattern = children.map((child) => child.op.$regex).join('|'); - return { op: { $regex: pattern, $options: 'i' } }; + const op = { $regex: pattern }; + if (children[0].op.$options) op.$options = children[0].op.$options; + return { op }; } return { query: { $or: children.map((child) => conditionToQuery(child, property)) } }; } -function buildCondition(node, property, isDateField, isBooleanField = false) { +function buildCondition( + node, + property, + isDateField, + isBooleanField = false, + isObjectIdField = false +) { if (node.type === 'leaf') { - return parseLeafCondition(node.token, isDateField, isBooleanField); + return parseLeafCondition(node.token, isDateField, isBooleanField, isObjectIdField); } const children = node.items.map((item) => - buildCondition(item, property, isDateField, isBooleanField) + buildCondition(item, property, isDateField, isBooleanField, isObjectIdField) ); - return node.type === 'and' ? combineAnd(children, property) : combineOr(children, property); + return node.type === 'and' + ? combineAnd(children, property) + : combineOr(children, property, isObjectIdField); } -function parseFilter(property, value, model = null) { +function idsToCondition(ids) { + if (!ids || ids.length === 0) return NO_MATCH_CONDITION; + if (ids.length === 1) return { value: ids[0] }; + return { op: { $in: ids } }; +} + +function extractObjectIdFromOperand(operand) { + const { suffix } = parsePrefixedValue(stripIgnoreCase(String(operand).trim())); + if (isObjectIdString(suffix)) { + return new mongoose.Types.ObjectId(suffix); + } + return null; +} + +const REF_OPERATOR_SYMBOLS = { + eq: '', + ne: '<>', + gt: '>', + gte: '>=', + lt: '<', + lte: '<=', +}; + +function buildRefListExpression(operator, operand) { + const text = String(operand).trim(); + if (operator === 'eq') return text; + return `${REF_OPERATOR_SYMBOLS[operator]}${text}`; +} + +// Pre-list the referenced model, matching the expression against name and/or _reference via parseFilter. +async function listRefModelIds(refModelEntry, expression) { + const refModel = refModelEntry.model; + const orClauses = []; + + if (refModel.schema.path('name')) { + orClauses.push(await parseFilter('name', expression, refModel)); + } + if (refModel.schema.path('_reference')) { + orClauses.push(await parseFilter('_reference', expression, refModel)); + } + + if (orClauses.length === 0) return []; + + const query = orClauses.length === 1 ? orClauses[0] : { $or: orClauses }; + const docs = await refModel.find(query).select('_id').lean(); + return docs.map((doc) => doc._id); +} + +function conditionToIds(cond) { + if (cond.query) return null; + if (cond.value !== undefined) return [cond.value]; + if (cond.op?.$in) return cond.op.$in; + return null; +} + +function combineOrRefIds(children) { + const ids = new Set(); + for (const child of children) { + if (child.query) return child; + const childIds = conditionToIds(child); + if (!childIds) return child; + childIds.forEach((id) => ids.add(String(id))); + } + return idsToCondition([...ids].map((id) => new mongoose.Types.ObjectId(id))); +} + +function combineAndRefIds(children) { + let ids = null; + for (const child of children) { + if (child.query) return child; + const childIds = conditionToIds(child); + if (!childIds || childIds.length === 0) return NO_MATCH_CONDITION; + const set = new Set(childIds.map(String)); + if (ids === null) { + ids = set; + } else { + ids = new Set([...ids].filter((id) => set.has(id))); + } + if (ids.size === 0) return NO_MATCH_CONDITION; + } + return idsToCondition([...ids].map((id) => new mongoose.Types.ObjectId(id))); +} + +async function resolveRefOperand(operand, refModelEntry, operator = 'eq') { + const operandText = String(operand).trim(); + const objectId = extractObjectIdFromOperand(operandText); + + if (objectId) { + if (operator === 'ne') return { op: { $ne: objectId } }; + if (operator === 'eq') return { value: objectId }; + return NO_MATCH_CONDITION; + } + + const expression = buildRefListExpression(operator, operandText); + const ids = await listRefModelIds(refModelEntry, expression); + + if (operator === 'ne') { + if (ids.length === 0) return { query: {} }; + return { op: { $nin: ids } }; + } + + return idsToCondition(ids); +} + +async function resolveRefLeaf(rawToken, refModelEntry) { + const token = rawToken.trim(); + if (token === '') return NO_MATCH_CONDITION; + + const rangeIdx = token.indexOf('..'); + if (rangeIdx !== -1) { + const ids = await listRefModelIds(refModelEntry, token); + return idsToCondition(ids); + } + + const operators = [ + ['<>', 'ne'], + ['>=', 'gte'], + ['<=', 'lte'], + ['>', 'gt'], + ['<', 'lt'], + ['=', 'eq'], + ]; + for (const [symbol, name] of operators) { + if (token.startsWith(symbol)) { + return resolveRefOperand(token.slice(symbol.length), refModelEntry, name); + } + } + + const objectId = extractObjectIdFromOperand(token); + if (objectId) return { value: objectId }; + + const ids = await listRefModelIds(refModelEntry, token); + return idsToCondition(ids); +} + +async function resolveRefCondition(node, refModelEntry) { + if (node.type === 'leaf') { + return resolveRefLeaf(node.token, refModelEntry); + } + + const children = await Promise.all( + node.items.map((item) => resolveRefCondition(item, refModelEntry)) + ); + + return node.type === 'and' ? combineAndRefIds(children) : combineOrRefIds(children); +} + +async function resolveObjectRefFilter(filterProperty, expression, refName) { + const refModelEntry = getRefModelEntryFromSchemaRef(refName); + logger.info('refModelEntry', refModelEntry, refName); + + if (!refModelEntry?.model) return { [filterProperty]: { $in: [] } }; + + const tree = parseExpression(expression); + const condition = await resolveRefCondition(tree, refModelEntry); + return conditionToQuery(condition, filterProperty); +} + +async function parseFilter(property, value, model = null) { // Normalize state filter to state.type for schemas with state: { type } if (property === 'state') { property = 'state.type'; } + const fieldKind = getFilterFieldKind(property, model); + const filterProperty = fieldKind.property; const isBoolField = isBooleanField(property, model); if (value?._id !== undefined && value?._id !== null) { - return { [property]: { _id: new mongoose.Types.ObjectId(value._id) } }; + return { [filterProperty]: new mongoose.Types.ObjectId(value._id) }; } // Non-string values pass through; boolean fields only accept actual booleans. if (typeof value !== 'string') { if (isBoolField && typeof value !== 'boolean') { - return { [property]: { $in: [] } }; + return { [filterProperty]: { $in: [] } }; } - return { [property]: value }; + return { [filterProperty]: value }; } - let trimmed = value.trim(); - if (trimmed.charAt(3) === ':') { + const trimmed = value.trim(); + + if (fieldKind.kind === 'objectId' && property != '_id') { + const refName = fieldKind.ref ?? getSchemaRefName(property, model); + logger.info('refName', refName); + logger.info('trimmed', trimmed); + logger.info('filterProperty', filterProperty); + return resolveObjectRefFilter(filterProperty, trimmed, refName); + } + + let expression = trimmed; + if (fieldKind.kind === 'default' && expression.charAt(3) === ':') { const afterColon = value.split(':')[1]; - trimmed = afterColon != null ? afterColon.trim() : ''; + expression = afterColon != null ? afterColon.trim() : ''; } const isDateField = looksLikeDateField(property); - const tree = parseExpression(trimmed); - const condition = buildCondition(tree, property, isDateField, isBoolField); - return conditionToQuery(condition, property); + const isObjectIdField = fieldKind.kind === 'objectId'; + const tree = parseExpression(expression); + const condition = buildCondition(tree, filterProperty, isDateField, isBoolField, isObjectIdField); + return conditionToQuery(condition, filterProperty); } function convertToCamelCase(obj) { @@ -1210,11 +1526,11 @@ function mergeFilterClauses(clauses) { } // Returns a filter object based on allowed filters and req.query -function getFilter(query, allowedFilters, parse = true, model = null) { +async function getFilter(query, allowedFilters, parse = true, model = null) { const clauses = []; for (const [key, value] of Object.entries(query)) { if (allowedFilters.includes(key)) { - clauses.push(parse ? parseFilter(key, value, model) : { [key]: value }); + clauses.push(parse ? await parseFilter(key, value, model) : { [key]: value }); } } return mergeFilterClauses(clauses);