Enhance filtering and parsing logic in utils.js and update route handlers for async support

This update introduces several utility functions in `utils.js` to improve the handling of ObjectId paths, schema types, and filtering logic. Key additions include `isObjectIdPath`, `getBaseProperty`, and `getFilterFieldKind`, which enhance the flexibility of property handling. Additionally, all route handlers in the finance and inventory modules have been refactored to support asynchronous operations, ensuring better performance and responsiveness when processing requests.
This commit is contained in:
Tom Butcher 2026-08-09 22:27:45 +01:00
parent d3adf00477
commit 2a30b7f3f6
54 changed files with 954 additions and 638 deletions

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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({

View File

@ -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);

View File

@ -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,

View File

@ -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,

View File

@ -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);