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'; } from '../../services/finance/invoices.js';
// list of invoices // list of invoices
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listInvoicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getInvoicePropertyValuesRouteHandler(req, res, property); getInvoicePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchInvoicesRouteHandler(req, res, search); searchInvoicesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newInvoiceRouteHandler(req, res); newInvoiceRouteHandler(req, res);
}); });
// get invoice stats // get invoice stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getInvoiceStatsRouteHandler(req, res); getInvoiceStatsRouteHandler(req, res);
}); });
// get invoice history // get invoice history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getInvoiceHistoryRouteHandler(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 { 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); 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); getInvoiceRouteHandler(req, res);
}); });

View File

@ -47,15 +47,15 @@ import {
} from '../../services/finance/payments.js'; } from '../../services/finance/payments.js';
// list of payments // list of payments
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listPaymentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getPaymentPropertyValuesRouteHandler(req, res, property); getPaymentPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPaymentsRouteHandler(req, res, search); searchPaymentsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newPaymentRouteHandler(req, res); newPaymentRouteHandler(req, res);
}); });
// get payment stats // get payment stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getPaymentStatsRouteHandler(req, res); getPaymentStatsRouteHandler(req, res);
}); });
// get payment history // get payment history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getPaymentHistoryRouteHandler(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 { 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); 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); getPaymentRouteHandler(req, res);
}); });

View File

@ -30,15 +30,15 @@ import {
} from '../../services/finance/taxrecords.js'; } from '../../services/finance/taxrecords.js';
// list of tax records // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listTaxRecordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getTaxRecordPropertyValuesRouteHandler(req, res, property); getTaxRecordPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchTaxRecordsRouteHandler(req, res, search); searchTaxRecordsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newTaxRecordRouteHandler(req, res); newTaxRecordRouteHandler(req, res);
}); });
// get tax record stats // get tax record stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getTaxRecordStatsRouteHandler(req, res); getTaxRecordStatsRouteHandler(req, res);
}); });
// get tax record history // get tax record history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getTaxRecordHistoryRouteHandler(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 { 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); 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); getTaxRecordRouteHandler(req, res);
}); });

View File

@ -42,15 +42,15 @@ import {
} from '../../services/inventory/filamentstocks.js'; } from '../../services/inventory/filamentstocks.js';
// list of filament stocks // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listFilamentStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilamentStockPropertyValuesRouteHandler(req, res, property); getFilamentStockPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchFilamentStocksRouteHandler(req, res, search); searchFilamentStocksRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newFilamentStockRouteHandler(req, res); newFilamentStockRouteHandler(req, res);
}); });
// get filament stock stats // get filament stock stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getFilamentStockStatsRouteHandler(req, res); getFilamentStockStatsRouteHandler(req, res);
}); });
// get filament stock history // get filament stock history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getFilamentStockHistoryRouteHandler(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 { 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); 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); getFilamentStockRouteHandler(req, res);
}); });

View File

@ -47,15 +47,15 @@ import {
} from '../../services/inventory/orderitems.js'; } from '../../services/inventory/orderitems.js';
// list of order items // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listOrderItemsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getOrderItemPropertyValuesRouteHandler(req, res, property); getOrderItemPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchOrderItemsRouteHandler(req, res, search); searchOrderItemsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newOrderItemRouteHandler(req, res); newOrderItemRouteHandler(req, res);
}); });
// get order item stats // get order item stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getOrderItemStatsRouteHandler(req, res); getOrderItemStatsRouteHandler(req, res);
}); });
// get order item history // get order item history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getOrderItemHistoryRouteHandler(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 { 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); 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); getOrderItemRouteHandler(req, res);
}); });

View File

@ -34,15 +34,15 @@ import {
} from '../../services/inventory/partstocks.js'; } from '../../services/inventory/partstocks.js';
// list of part stocks // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listPartStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getPartStockPropertyValuesRouteHandler(req, res, property); getPartStockPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPartStocksRouteHandler(req, res, search); searchPartStocksRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newPartStockRouteHandler(req, res); newPartStockRouteHandler(req, res);
}); });
// get part stock stats // get part stock stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getPartStockStatsRouteHandler(req, res); getPartStockStatsRouteHandler(req, res);
}); });
// get part stock history // get part stock history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getPartStockHistoryRouteHandler(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 { 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); 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); getPartStockRouteHandler(req, res);
}); });

View File

@ -33,15 +33,15 @@ import {
getProductStockNeighborsRouteHandler getProductStockNeighborsRouteHandler
} from '../../services/inventory/productstocks.js'; } 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listProductStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getProductStockPropertyValuesRouteHandler(req, res, property); getProductStockPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchProductStocksRouteHandler(req, res, search); searchProductStocksRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newProductStockRouteHandler(req, res); newProductStockRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getProductStockStatsRouteHandler(req, res); getProductStockStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getProductStockHistoryRouteHandler(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 { 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); 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); getProductStockRouteHandler(req, res);
}); });

View File

@ -50,52 +50,52 @@ import {
} from '../../services/inventory/purchaseorders.js'; } from '../../services/inventory/purchaseorders.js';
// list of purchase orders // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.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); listPurchaseOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getPurchaseOrderPropertyValuesRouteHandler(req, res, property); getPurchaseOrderPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPurchaseOrdersRouteHandler(req, res, search); searchPurchaseOrdersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newPurchaseOrderRouteHandler(req, res); newPurchaseOrderRouteHandler(req, res);
}); });
// get purchase order stats // get purchase order stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getPurchaseOrderStatsRouteHandler(req, res); getPurchaseOrderStatsRouteHandler(req, res);
}); });
// get purchase order history // get purchase order history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getPurchaseOrderHistoryRouteHandler(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 { 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); 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); getPurchaseOrderRouteHandler(req, res);
}); });

View File

@ -42,52 +42,52 @@ import {
} from '../../services/inventory/shipments.js'; } from '../../services/inventory/shipments.js';
// list of shipments // list of shipments
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.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); listShipmentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getShipmentPropertyValuesRouteHandler(req, res, property); getShipmentPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchShipmentsRouteHandler(req, res, search); searchShipmentsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newShipmentRouteHandler(req, res); newShipmentRouteHandler(req, res);
}); });
// get shipment stats // get shipment stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getShipmentStatsRouteHandler(req, res); getShipmentStatsRouteHandler(req, res);
}); });
// get shipment history // get shipment history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getShipmentHistoryRouteHandler(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 { 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); 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); getShipmentRouteHandler(req, res);
}); });

View File

@ -26,7 +26,7 @@ const listAllowedFilters = [
]; ];
// List stock audits // List stock audits
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property } = req.query; const { page, limit, property } = req.query;
var filter = {}; var filter = {};
@ -34,7 +34,7 @@ router.get('/', isAuthenticated, (req, res) => {
for (const [key, value] of Object.entries(req.query)) { for (const [key, value] of Object.entries(req.query)) {
for (var i = 0; i < listAllowedFilters.length; i++) { for (var i = 0; i < listAllowedFilters.length; i++) {
if (key == listAllowedFilters[i]) { if (key == listAllowedFilters[i]) {
const parsedFilter = parseFilter(key, value); const parsedFilter = await parseFilter(key, value);
filter = { ...filter, ...parsedFilter }; filter = { ...filter, ...parsedFilter };
} }
} }
@ -44,43 +44,43 @@ router.get('/', isAuthenticated, (req, res) => {
}); });
// Create new stock audit // Create new stock audit
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newStockAuditRouteHandler(req, res); newStockAuditRouteHandler(req, res);
}); });
// get stock audit stats // get stock audit stats
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchStockAuditsRouteHandler(req, res, search); searchStockAuditsRouteHandler(req, res, search);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getStockAuditStatsRouteHandler(req, res); getStockAuditStatsRouteHandler(req, res);
}); });
// get stock audit history // get stock audit history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getStockAuditHistoryRouteHandler(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 { 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); getStockAuditNeighborsRouteHandler(req, res, property, filter, search, sort, order, id);
}); });
// Get specific stock audit // Get specific stock audit
router.get('/:id', isAuthenticated, (req, res) => { router.get('/:id', isAuthenticated, async (req, res) => {
getStockAuditRouteHandler(req, res); getStockAuditRouteHandler(req, res);
}); });
// Update stock audit // Update stock audit
router.put('/:id', isAuthenticated, (req, res) => { router.put('/:id', isAuthenticated, async (req, res) => {
updateStockAuditRouteHandler(req, res); updateStockAuditRouteHandler(req, res);
}); });
// Delete stock audit // Delete stock audit
router.delete('/:id', isAuthenticated, (req, res) => { router.delete('/:id', isAuthenticated, async (req, res) => {
deleteStockAuditRouteHandler(req, res); deleteStockAuditRouteHandler(req, res);
}); });

View File

@ -29,15 +29,15 @@ import {
} from '../../services/inventory/stockevents.js'; } from '../../services/inventory/stockevents.js';
// list of stock events // list of stock events
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listStockEventsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getStockEventPropertyValuesRouteHandler(req, res, property); getStockEventPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchStockEventsRouteHandler(req, res, search); searchStockEventsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newStockEventRouteHandler(req, res); newStockEventRouteHandler(req, res);
}); });
// get stock event stats // get stock event stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getStockEventStatsRouteHandler(req, res); getStockEventStatsRouteHandler(req, res);
}); });
// get stock event history // get stock event history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getStockEventHistoryRouteHandler(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 { 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); 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); getStockEventRouteHandler(req, res);
}); });

View File

@ -22,15 +22,15 @@ import {
getStockLocationNeighborsRouteHandler getStockLocationNeighborsRouteHandler
} from '../../services/inventory/stocklocations.js'; } 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listStockLocationsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getStockLocationPropertyValuesRouteHandler(req, res, property); getStockLocationPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchStockLocationsRouteHandler(req, res, search); searchStockLocationsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newStockLocationRouteHandler(req, res); newStockLocationRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getStockLocationStatsRouteHandler(req, res); getStockLocationStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getStockLocationHistoryRouteHandler(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 { 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); 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); getStockLocationRouteHandler(req, res);
}); });

View File

@ -31,15 +31,15 @@ import {
getStockTransferNeighborsRouteHandler getStockTransferNeighborsRouteHandler
} from '../../services/inventory/stocktransfers.js'; } 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listStockTransfersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getStockTransferPropertyValuesRouteHandler(req, res, property); getStockTransferPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchStockTransfersRouteHandler(req, res, search); searchStockTransfersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newStockTransferRouteHandler(req, res); newStockTransferRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getStockTransferStatsRouteHandler(req, res); getStockTransferStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getStockTransferHistoryRouteHandler(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 { 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); 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); getStockTransferRouteHandler(req, res);
}); });

View File

@ -31,38 +31,38 @@ import {
getAppPasswordNeighborsRouteHandler getAppPasswordNeighborsRouteHandler
} from '../../services/management/apppasswords.js'; } 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 { 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); 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 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) : {}; const masterFilter = req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {};
listAppPasswordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listAppPasswordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getAppPasswordPropertyValuesRouteHandler(req, res, property); getAppPasswordPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchAppPasswordsRouteHandler(req, res, search); searchAppPasswordsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newAppPasswordRouteHandler(req, res); newAppPasswordRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getAppPasswordStatsRouteHandler(req, res); getAppPasswordStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getAppPasswordHistoryRouteHandler(req, res); getAppPasswordHistoryRouteHandler(req, res);
}); });
@ -70,13 +70,13 @@ router.post('/:id/regenerateSecret', isAuthenticated, async (req, res) => {
regenerateSecretRouteHandler(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 { 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); 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); 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 (const [key, value] of Object.entries(req.query)) {
for (var i = 0; i < allowedFilters.length; i++) { for (var i = 0; i < allowedFilters.length; i++) {
if (key == allowedFilters[i]) { if (key == allowedFilters[i]) {
const parsedFilter = parseFilter(key, value); const parsedFilter = await parseFilter(key, value);
filter = { ...filter, ...parsedFilter }; filter = { ...filter, ...parsedFilter };
} }
} }
@ -38,17 +38,17 @@ router.get('/', isAuthenticated, async (req, res) => {
}); });
// get audit log stats // get audit log stats
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchAuditLogsRouteHandler(req, res, search); searchAuditLogsRouteHandler(req, res, search);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getAuditLogStatsRouteHandler(req, res); getAuditLogStatsRouteHandler(req, res);
}); });
// get audit log history // get audit log history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getAuditLogHistoryRouteHandler(req, res); getAuditLogHistoryRouteHandler(req, res);
}); });

View File

@ -32,15 +32,15 @@ import {
} from '../../services/management/courier.js'; } from '../../services/management/courier.js';
// list of couriers // list of couriers
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listCouriersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getCourierPropertyValuesRouteHandler(req, res, property); getCourierPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchCouriersRouteHandler(req, res, search); searchCouriersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newCourierRouteHandler(req, res); newCourierRouteHandler(req, res);
}); });
// get courier stats // get courier stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getCourierStatsRouteHandler(req, res); getCourierStatsRouteHandler(req, res);
}); });
// get courier history // get courier history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getCourierHistoryRouteHandler(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 { 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); 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); getCourierRouteHandler(req, res);
}); });

View File

@ -45,15 +45,15 @@ import {
} from '../../services/management/courierservice.js'; } from '../../services/management/courierservice.js';
// list of courier services // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listCourierServicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getCourierServicePropertyValuesRouteHandler(req, res, property); getCourierServicePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchCourierServicesRouteHandler(req, res, search); searchCourierServicesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newCourierServiceRouteHandler(req, res); newCourierServiceRouteHandler(req, res);
}); });
// get courier service stats // get courier service stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getCourierServiceStatsRouteHandler(req, res); getCourierServiceStatsRouteHandler(req, res);
}); });
// get courierservice history // get courierservice history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getCourierServiceHistoryRouteHandler(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 { 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); 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); getCourierServiceRouteHandler(req, res);
}); });

View File

@ -30,15 +30,15 @@ import {
} from '../../services/management/documentjobs.js'; } from '../../services/management/documentjobs.js';
// list of document jobs // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listDocumentJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getDocumentJobPropertyValuesRouteHandler(req, res, property); getDocumentJobPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchDocumentJobsRouteHandler(req, res, search); searchDocumentJobsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newDocumentJobRouteHandler(req, res); newDocumentJobRouteHandler(req, res);
}); });
// get document job stats // get document job stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getDocumentJobStatsRouteHandler(req, res); getDocumentJobStatsRouteHandler(req, res);
}); });
// get documentjobs history // get documentjobs history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getDocumentJobHistoryRouteHandler(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 { 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); 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); getDocumentJobRouteHandler(req, res);
}); });

View File

@ -31,15 +31,15 @@ import {
} from '../../services/management/documentprinters.js'; } from '../../services/management/documentprinters.js';
// list of document printers // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listDocumentPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getDocumentPrinterPropertyValuesRouteHandler(req, res, property); getDocumentPrinterPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchDocumentPrintersRouteHandler(req, res, search); searchDocumentPrintersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newDocumentPrinterRouteHandler(req, res); newDocumentPrinterRouteHandler(req, res);
}); });
// get document printer stats // get document printer stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getDocumentPrinterStatsRouteHandler(req, res); getDocumentPrinterStatsRouteHandler(req, res);
}); });
// get documentprinters history // get documentprinters history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getDocumentPrinterHistoryRouteHandler(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 { 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); 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); getDocumentPrinterRouteHandler(req, res);
}); });

View File

@ -29,15 +29,15 @@ import {
} from '../../services/management/documentsizes.js'; } from '../../services/management/documentsizes.js';
// list of document sizes // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listDocumentSizesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getDocumentSizePropertyValuesRouteHandler(req, res, property); getDocumentSizePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchDocumentSizesRouteHandler(req, res, search); searchDocumentSizesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newDocumentSizeRouteHandler(req, res); newDocumentSizeRouteHandler(req, res);
}); });
// get document size stats // get document size stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getDocumentSizeStatsRouteHandler(req, res); getDocumentSizeStatsRouteHandler(req, res);
}); });
// get documentsizes history // get documentsizes history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getDocumentSizeHistoryRouteHandler(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 { 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); 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); getDocumentSizeRouteHandler(req, res);
}); });

View File

@ -30,15 +30,15 @@ import {
} from '../../services/management/documenttemplates.js'; } from '../../services/management/documenttemplates.js';
// list of document templates // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listDocumentTemplatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getDocumentTemplatePropertyValuesRouteHandler(req, res, property); getDocumentTemplatePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchDocumentTemplatesRouteHandler(req, res, search); searchDocumentTemplatesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newDocumentTemplateRouteHandler(req, res); newDocumentTemplateRouteHandler(req, res);
}); });
// get document template stats // get document template stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getDocumentTemplateStatsRouteHandler(req, res); getDocumentTemplateStatsRouteHandler(req, res);
}); });
// get document template history // get document template history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getDocumentTemplateHistoryRouteHandler(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 { 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); 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); getDocumentTemplateRouteHandler(req, res);
}); });

View File

@ -33,7 +33,7 @@ import {
} from '../../services/management/filaments.js'; } from '../../services/management/filaments.js';
// list of filaments // list of filaments
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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 (const [key, value] of Object.entries(req.query)) {
for (var i = 0; i < listAllowedFilters.length; i++) { for (var i = 0; i < listAllowedFilters.length; i++) {
if (key == listAllowedFilters[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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listFilamentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilamentPropertyValuesRouteHandler(req, res, property); getFilamentPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchFilamentsRouteHandler(req, res, search); searchFilamentsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newFilamentRouteHandler(req, res); newFilamentRouteHandler(req, res);
}); });
// get filament stats // get filament stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getFilamentStatsRouteHandler(req, res); getFilamentStatsRouteHandler(req, res);
}); });
// get filaments history // get filaments history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getFilamentHistoryRouteHandler(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 { 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); 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); getFilamentRouteHandler(req, res);
}); });

View File

@ -32,15 +32,15 @@ import {
getFilamentSkuNeighborsRouteHandler, getFilamentSkuNeighborsRouteHandler,
} from '../../services/management/filamentskus.js'; } 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
let masterFilter = {}; let masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listFilamentSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilamentSkuPropertyValuesRouteHandler(req, res, property); getFilamentSkuPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchFilamentSkusRouteHandler(req, res, search); searchFilamentSkusRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newFilamentSkuRouteHandler(req, res); newFilamentSkuRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getFilamentSkuStatsRouteHandler(req, res); getFilamentSkuStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getFilamentSkuHistoryRouteHandler(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 { 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); 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); getFilamentSkuRouteHandler(req, res);
}); });

View File

@ -34,15 +34,15 @@ import {
} from '../../services/management/files.js'; } from '../../services/management/files.js';
// list of files // list of files
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilePropertyValuesRouteHandler(req, res, property); getFilePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchFilesRouteHandler(req, res, search); searchFilesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newFileRouteHandler(req, res); newFileRouteHandler(req, res);
}); });
// get file stats // get file stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getFileStatsRouteHandler(req, res); getFileStatsRouteHandler(req, res);
}); });
// get file history // get file history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getFileHistoryRouteHandler(req, res); getFileHistoryRouteHandler(req, res);
}); });
router.delete('/:id/flush', isAuthenticated, (req, res) => { router.delete('/:id/flush', isAuthenticated, async (req, res) => {
flushFileRouteHandler(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 { 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); 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); getFileRouteHandler(req, res);
}); });
router.get('/:id/content', isAuthenticated, (req, res) => { router.get('/:id/content', isAuthenticated, async (req, res) => {
getFileContentRouteHandler(req, res); getFileContentRouteHandler(req, res);
}); });
router.get('/:id/thumbnail', isAuthenticated, (req, res) => { router.get('/:id/thumbnail', isAuthenticated, async (req, res) => {
getFileThumbnailRouteHandler(req, res); getFileThumbnailRouteHandler(req, res);
}); });

View File

@ -29,15 +29,15 @@ import {
} from '../../services/management/hosts.js'; } from '../../services/management/hosts.js';
// list of hosts // list of hosts
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listHostsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getHostPropertyValuesRouteHandler(req, res, property); getHostPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchHostsRouteHandler(req, res, search); searchHostsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newHostRouteHandler(req, res); newHostRouteHandler(req, res);
}); });
// get host stats // get host stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getHostStatsRouteHandler(req, res); getHostStatsRouteHandler(req, res);
}); });
// get hosts history // get hosts history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getHostHistoryRouteHandler(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 { 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); 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); getHostRouteHandler(req, res);
}); });

View File

@ -28,7 +28,7 @@ import {
} from '../../services/management/materials.js'; } from '../../services/management/materials.js';
// list of materials // list of materials
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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)) { for (const [key, value] of Object.entries(req.query)) {
if (listAllowedFilters.includes(key)) { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listMaterialsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getMaterialPropertyValuesRouteHandler(req, res, property); getMaterialPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchMaterialsRouteHandler(req, res, search); searchMaterialsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newMaterialRouteHandler(req, res); newMaterialRouteHandler(req, res);
}); });
// get material stats // get material stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getMaterialStatsRouteHandler(req, res); getMaterialStatsRouteHandler(req, res);
}); });
// get materials history // get materials history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getMaterialHistoryRouteHandler(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 { 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); 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); getMaterialRouteHandler(req, res);
}); });

View File

@ -30,15 +30,15 @@ import {
} from '../../services/management/notetypes.js'; } from '../../services/management/notetypes.js';
// list of note types // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listNoteTypesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getNoteTypePropertyValuesRouteHandler(req, res, property); getNoteTypePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchNoteTypesRouteHandler(req, res, search); searchNoteTypesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newNoteTypeRouteHandler(req, res); newNoteTypeRouteHandler(req, res);
}); });
// get note type stats // get note type stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getNoteTypeStatsRouteHandler(req, res); getNoteTypeStatsRouteHandler(req, res);
}); });
// get notetypes history // get notetypes history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getNoteTypeHistoryRouteHandler(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 { 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); 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); getNoteTypeRouteHandler(req, res);
}); });

View File

@ -29,15 +29,15 @@ import {
} from '../../services/management/parts.js'; } from '../../services/management/parts.js';
// list of parts // list of parts
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listPartsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getPartPropertyValuesRouteHandler(req, res, property); getPartPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPartsRouteHandler(req, res, search); searchPartsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newPartRouteHandler(req, res); newPartRouteHandler(req, res);
}); });
// get part stats // get part stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getPartStatsRouteHandler(req, res); getPartStatsRouteHandler(req, res);
}); });
// get parts history // get parts history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getPartHistoryRouteHandler(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 { 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); 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); getPartRouteHandler(req, res);
}); });

View File

@ -32,15 +32,15 @@ import {
getPartSkuNeighborsRouteHandler getPartSkuNeighborsRouteHandler
} from '../../services/management/partskus.js'; } 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
let masterFilter = {}; let masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listPartSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getPartSkuPropertyValuesRouteHandler(req, res, property); getPartSkuPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPartSkusRouteHandler(req, res, search); searchPartSkusRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newPartSkuRouteHandler(req, res); newPartSkuRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getPartSkuStatsRouteHandler(req, res); getPartSkuStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getPartSkuHistoryRouteHandler(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 { 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); 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); getPartSkuRouteHandler(req, res);
}); });

View File

@ -21,15 +21,15 @@ const router = express.Router();
const listAllowedFilters = ['_id','name','createdAt','updatedAt','_reference']; const listAllowedFilters = ['_id','name','createdAt','updatedAt','_reference'];
const propertiesAllowedFilters = ['name']; const propertiesAllowedFilters = ['name'];
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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 properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listProductCategoriesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getProductCategoryPropertyValuesRouteHandler(req, res, property); getProductCategoryPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchProductCategoriesRouteHandler(req, res, search); searchProductCategoriesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newProductCategoryRouteHandler(req, res); newProductCategoryRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getProductCategoryStatsRouteHandler(req, res); getProductCategoryStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getProductCategoryHistoryRouteHandler(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 { 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); 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); getProductCategoryRouteHandler(req, res);
}); });

View File

@ -31,15 +31,15 @@ import {
} from '../../services/management/products.js'; } from '../../services/management/products.js';
// list of products // list of products
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listProductsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getProductPropertyValuesRouteHandler(req, res, property); getProductPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchProductsRouteHandler(req, res, search); searchProductsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newProductRouteHandler(req, res); newProductRouteHandler(req, res);
}); });
// get product stats // get product stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getProductStatsRouteHandler(req, res); getProductStatsRouteHandler(req, res);
}); });
// get products history // get products history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getProductHistoryRouteHandler(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 { 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); 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); getProductRouteHandler(req, res);
}); });

View File

@ -32,15 +32,15 @@ import {
getProductSkuNeighborsRouteHandler getProductSkuNeighborsRouteHandler
} from '../../services/management/productskus.js'; } 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
let masterFilter = {}; let masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listProductSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getProductSkuPropertyValuesRouteHandler(req, res, property); getProductSkuPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchProductSkusRouteHandler(req, res, search); searchProductSkusRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newProductSkuRouteHandler(req, res); newProductSkuRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getProductSkuStatsRouteHandler(req, res); getProductSkuStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getProductSkuHistoryRouteHandler(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 { 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); 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); getProductSkuRouteHandler(req, res);
}); });

View File

@ -31,15 +31,15 @@ import {
} from '../../services/management/taxrates.js'; } from '../../services/management/taxrates.js';
// list of tax rates // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listTaxRatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getTaxRatePropertyValuesRouteHandler(req, res, property); getTaxRatePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchTaxRatesRouteHandler(req, res, search); searchTaxRatesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newTaxRateRouteHandler(req, res); newTaxRateRouteHandler(req, res);
}); });
// get tax rate stats // get tax rate stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getTaxRateStatsRouteHandler(req, res); getTaxRateStatsRouteHandler(req, res);
}); });
// get tax rate history // get tax rate history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getTaxRateHistoryRouteHandler(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 { 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); 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); getTaxRateRouteHandler(req, res);
}); });

View File

@ -30,15 +30,15 @@ import {
} from '../../services/management/users.js'; } from '../../services/management/users.js';
// list of document templates // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listUsersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getUserPropertyValuesRouteHandler(req, res, property); getUserPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchUsersRouteHandler(req, res, search); searchUsersRouteHandler(req, res, search);
}); });
// get user stats // get user stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getUserStatsRouteHandler(req, res); getUserStatsRouteHandler(req, res);
}); });
// get user history // get user history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getUserHistoryRouteHandler(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 { 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); 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); getUserRouteHandler(req, res);
}); });

View File

@ -29,15 +29,15 @@ import {
} from '../../services/management/vendors.js'; } from '../../services/management/vendors.js';
// list of vendors // list of vendors
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listVendorsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getVendorPropertyValuesRouteHandler(req, res, property); getVendorPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchVendorsRouteHandler(req, res, search); searchVendorsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newVendorRouteHandler(req, res); newVendorRouteHandler(req, res);
}); });
// get vendor stats // get vendor stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getVendorStatsRouteHandler(req, res); getVendorStatsRouteHandler(req, res);
}); });
// get vendors history // get vendors history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getVendorHistoryRouteHandler(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 { 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); 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); getVendorRouteHandler(req, res);
}); });

View File

@ -26,15 +26,15 @@ const listAllowedFilters = [
const propertiesAllowedFilters = ['parent']; const propertiesAllowedFilters = ['parent'];
// list of notes // list of notes
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listNotesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getNotePropertyValuesRouteHandler(req, res, property); getNotePropertyValuesRouteHandler(req, res, property);
}); });
// create new note // create new note
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newNoteRouteHandler(req, res); newNoteRouteHandler(req, res);
}); });
// get note stats // get note stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getNoteStatsRouteHandler(req, res); getNoteStatsRouteHandler(req, res);
}); });
// get note history // get note history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getNoteHistoryRouteHandler(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 { 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); 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); getNoteRouteHandler(req, res);
}); });

View File

@ -11,26 +11,26 @@ import { getFilter } from '../../utils.js';
const router = express.Router(); 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 { page = 1, limit = 50, sort = 'createdAt', order = 'descend' } = req.query;
const allowedFilters = ['user']; const allowedFilters = ['user'];
const filter = getFilter(req.query, allowedFilters); const filter = await getFilter(req.query, allowedFilters);
listNotificationsRouteHandler(req, res, page, limit, filter, sort, order); 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); markAllNotificationsAsReadRouteHandler(req, res);
}); });
router.put('/:id/read', isAuthenticated, (req, res) => { router.put('/:id/read', isAuthenticated, async (req, res) => {
markNotificationAsReadRouteHandler(req, res); markNotificationAsReadRouteHandler(req, res);
}); });
router.delete('/', isAuthenticated, (req, res) => { router.delete('/', isAuthenticated, async (req, res) => {
deleteAllNotificationsRouteHandler(req, res); deleteAllNotificationsRouteHandler(req, res);
}); });
router.delete('/:id', isAuthenticated, (req, res) => { router.delete('/:id', isAuthenticated, async (req, res) => {
deleteNotificationRouteHandler(req, res); deleteNotificationRouteHandler(req, res);
}); });

View File

@ -11,26 +11,26 @@ import { getFilter } from '../../utils.js';
const router = express.Router(); 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 { page, limit, property, search, sort, order } = req.query;
const allowedFilters = ['user', 'object', 'objectType']; 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); listUserNotifiersRouteHandler(req, res, page, limit, property, filter, search, sort, order);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newUserNotifierRouteHandler(req, res); newUserNotifierRouteHandler(req, res);
}); });
router.get('/:id', isAuthenticated, (req, res) => { router.get('/:id', isAuthenticated, async (req, res) => {
getUserNotifierRouteHandler(req, res); getUserNotifierRouteHandler(req, res);
}); });
router.put('/:id', isAuthenticated, (req, res) => { router.put('/:id', isAuthenticated, async (req, res) => {
editUserNotifierRouteHandler(req, res); editUserNotifierRouteHandler(req, res);
}); });
router.delete('/:id', isAuthenticated, (req, res) => { router.delete('/:id', isAuthenticated, async (req, res) => {
deleteUserNotifierRouteHandler(req, res); deleteUserNotifierRouteHandler(req, res);
}); });

View File

@ -19,15 +19,15 @@ const router = express.Router();
const listAllowedFilters = ['_id','name','createdAt','updatedAt','_reference']; const listAllowedFilters = ['_id','name','createdAt','updatedAt','_reference'];
const propertiesAllowedFilters = ['name']; const propertiesAllowedFilters = ['name'];
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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 properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listFilamentProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilamentProfilePropertyValuesRouteHandler(req, res, property); getFilamentProfilePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
searchFilamentProfilesRouteHandler(req, res, req.query.search); searchFilamentProfilesRouteHandler(req, res, req.query.search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newFilamentProfileRouteHandler(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 { 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); 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); getFilamentProfileRouteHandler(req, res);
}); });
router.put('/:id', isAuthenticated, (req, res) => { router.put('/:id', isAuthenticated, async (req, res) => {
editFilamentProfileRouteHandler(req, res); editFilamentProfileRouteHandler(req, res);
}); });
router.delete('/:id', isAuthenticated, (req, res) => { router.delete('/:id', isAuthenticated, async (req, res) => {
deleteFilamentProfileRouteHandler(req, res); deleteFilamentProfileRouteHandler(req, res);
}); });

View File

@ -31,15 +31,15 @@ import {
import { convertPropertiesString, getFilter } from '../../utils.js'; import { convertPropertiesString, getFilter } from '../../utils.js';
// list of gcodeFiles // list of gcodeFiles
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listGCodeFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getGCodeFilePropertyValuesRouteHandler(req, res, property); getGCodeFilePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchGCodeFilesRouteHandler(req, res, search); searchGCodeFilesRouteHandler(req, res, search);
}); });
// create new gcodeFile // create new gcodeFile
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newGCodeFileRouteHandler(req, res); newGCodeFileRouteHandler(req, res);
}); });
// get gcodeFile stats // get gcodeFile stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getGCodeFileStatsRouteHandler(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 { 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); 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); getGCodeFileRouteHandler(req, res);
}); });
router.get('/:id/content', isAuthenticated, (req, res) => { router.get('/:id/content', isAuthenticated, async (req, res) => {
getGCodeFileContentRouteHandler(req, res); getGCodeFileContentRouteHandler(req, res);
}); });

View File

@ -29,15 +29,15 @@ import {
import { convertPropertiesString, getFilter } from '../../utils.js'; import { convertPropertiesString, getFilter } from '../../utils.js';
// list of jobs // list of jobs
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getJobPropertyValuesRouteHandler(req, res, property); getJobPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchJobsRouteHandler(req, res, search); searchJobsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newJobRouteHandler(req, res); newJobRouteHandler(req, res);
}); });
// get job stats // get job stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getJobStatsRouteHandler(req, res); getJobStatsRouteHandler(req, res);
}); });
// get job history // get job history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getJobHistoryRouteHandler(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 { 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); 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); getJobRouteHandler(req, res);
}); });

View File

@ -19,15 +19,15 @@ const router = express.Router();
const listAllowedFilters = ['_id','name','createdAt','updatedAt','_reference']; const listAllowedFilters = ['_id','name','createdAt','updatedAt','_reference'];
const propertiesAllowedFilters = ['name']; const propertiesAllowedFilters = ['name'];
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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 properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listPrinterProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getPrinterProfilePropertyValuesRouteHandler(req, res, property); getPrinterProfilePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
searchPrinterProfilesRouteHandler(req, res, req.query.search); searchPrinterProfilesRouteHandler(req, res, req.query.search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newPrinterProfileRouteHandler(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 { 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); 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); getPrinterProfileRouteHandler(req, res);
}); });
router.put('/:id', isAuthenticated, (req, res) => { router.put('/:id', isAuthenticated, async (req, res) => {
editPrinterProfileRouteHandler(req, res); editPrinterProfileRouteHandler(req, res);
}); });
router.delete('/:id', isAuthenticated, (req, res) => { router.delete('/:id', isAuthenticated, async (req, res) => {
deletePrinterProfileRouteHandler(req, res); deletePrinterProfileRouteHandler(req, res);
}); });

View File

@ -30,15 +30,15 @@ const listAllowedFilters = [
]; ];
const propertiesAllowedFilters = ['tags']; const propertiesAllowedFilters = ['tags'];
// list of printers // list of printers
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getPrinterPropertyValuesRouteHandler(req, res, property); getPrinterPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPrintersRouteHandler(req, res, search); searchPrintersRouteHandler(req, res, search);
}); });
// create new printer // create new printer
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newPrinterRouteHandler(req, res); newPrinterRouteHandler(req, res);
}); });
// get printer history // get printer history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getPrinterHistoryRouteHandler(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 { 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); getPrinterNeighborsRouteHandler(req, res, property, filter, search, sort, order, id);
}); });
// get printer stats // get printer stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getPrinterStatsRouteHandler(req, res); getPrinterStatsRouteHandler(req, res);
}); });
router.get('/:id', isAuthenticated, (req, res) => { router.get('/:id', isAuthenticated, async (req, res) => {
getPrinterRouteHandler(req, res); getPrinterRouteHandler(req, res);
}); });

View File

@ -26,15 +26,15 @@ import {
import { getFilter, convertPropertiesString } from '../../utils.js'; import { getFilter, convertPropertiesString } from '../../utils.js';
// list of sub jobs // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listSubJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getSubJobPropertyValuesRouteHandler(req, res, property); getSubJobPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchSubJobsRouteHandler(req, res, search); searchSubJobsRouteHandler(req, res, search);
}); });
// get sub job stats // get sub job stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getSubJobStatsRouteHandler(req, res); getSubJobStatsRouteHandler(req, res);
}); });
// get sub job history // get sub job history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getSubJobHistoryRouteHandler(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 { 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); 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); getSubJobRouteHandler(req, res);
}); });

View File

@ -29,15 +29,15 @@ import {
} from '../../services/sales/clients.js'; } from '../../services/sales/clients.js';
// list of clients // list of clients
router.get('/', isAuthenticated, (req, res) => { router.get('/', isAuthenticated, async (req, res) => {
const { page, limit, property, search, sort, order } = req.query; 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listClientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getClientPropertyValuesRouteHandler(req, res, property); getClientPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchClientsRouteHandler(req, res, search); searchClientsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newClientRouteHandler(req, res); newClientRouteHandler(req, res);
}); });
// get client stats // get client stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getClientStatsRouteHandler(req, res); getClientStatsRouteHandler(req, res);
}); });
// get clients history // get clients history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getClientHistoryRouteHandler(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 { 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); 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); getClientRouteHandler(req, res);
}); });

View File

@ -44,15 +44,15 @@ import {
getListingNeighborsRouteHandler getListingNeighborsRouteHandler
} from '../../services/sales/listings.js'; } 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listListingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getListingPropertyValuesRouteHandler(req, res, property); getListingPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchListingsRouteHandler(req, res, search); searchListingsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newListingRouteHandler(req, res); newListingRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getListingStatsRouteHandler(req, res); getListingStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getListingHistoryRouteHandler(req, res); getListingHistoryRouteHandler(req, res);
}); });
router.post('/:id/publish', isAuthenticated, (req, res) => { router.post('/:id/publish', isAuthenticated, async (req, res) => {
publishListingRouteHandler(req, res); publishListingRouteHandler(req, res);
}); });
router.post('/:id/unpublish', isAuthenticated, (req, res) => { router.post('/:id/unpublish', isAuthenticated, async (req, res) => {
unpublishListingRouteHandler(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 { 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); 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); getListingRouteHandler(req, res);
}); });

View File

@ -42,15 +42,15 @@ import {
getListingVarientNeighborsRouteHandler getListingVarientNeighborsRouteHandler
} from '../../services/sales/listingvarients.js'; } 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listListingVarientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getListingVarientPropertyValuesRouteHandler(req, res, property); getListingVarientPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchListingVarientsRouteHandler(req, res, search); searchListingVarientsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newListingVarientRouteHandler(req, res); newListingVarientRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getListingVarientStatsRouteHandler(req, res); getListingVarientStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getListingVarientHistoryRouteHandler(req, res); getListingVarientHistoryRouteHandler(req, res);
}); });
router.post('/:id/publish', isAuthenticated, (req, res) => { router.post('/:id/publish', isAuthenticated, async (req, res) => {
publishListingVarientRouteHandler(req, res); publishListingVarientRouteHandler(req, res);
}); });
router.post('/:id/unpublish', isAuthenticated, (req, res) => { router.post('/:id/unpublish', isAuthenticated, async (req, res) => {
unpublishListingVarientRouteHandler(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 { 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); 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); getListingVarientRouteHandler(req, res);
}); });

View File

@ -37,15 +37,15 @@ import {
getMarketplaceNeighborsRouteHandler getMarketplaceNeighborsRouteHandler
} from '../../services/sales/marketplaces.js'; } 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = JSON.parse(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); listMarketplacesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getMarketplacePropertyValuesRouteHandler(req, res, property); getMarketplacePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchMarketplacesRouteHandler(req, res, search); searchMarketplacesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newMarketplaceRouteHandler(req, res); newMarketplaceRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getMarketplaceStatsRouteHandler(req, res); getMarketplaceStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getMarketplaceHistoryRouteHandler(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); getMarketplaceAuthUrlRouteHandler(req, res);
}); });
router.post('/:id/auth/exchange', isAuthenticated, (req, res) => { router.post('/:id/auth/exchange', isAuthenticated, async (req, res) => {
exchangeMarketplaceAuthCodeRouteHandler(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); refreshMarketplaceAuthRouteHandler(req, res);
}); });
router.post('/:id/sync/items', isAuthenticated, (req, res) => { router.post('/:id/sync/items', isAuthenticated, async (req, res) => {
syncMarketplaceItemsRouteHandler(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); syncMarketplaceOrdersRouteHandler(req, res);
}); });
// Webhook endpoint — no auth, provider verifies via signature // Webhook endpoint — no auth, provider verifies via signature
router.post('/:id/hook', (req, res) => { router.post('/:id/hook', async (req, res) => {
marketplaceWebhookRouteHandler(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 { 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); 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); getMarketplaceRouteHandler(req, res);
}); });

View File

@ -33,52 +33,52 @@ import {
} from '../../services/sales/salesorders.js'; } from '../../services/sales/salesorders.js';
// list of sales orders // 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 { 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); 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); let properties = convertPropertiesString(req.query.properties);
const filter = getFilter(req.query, propertiesAllowedFilters, false); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.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); listSalesOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, (req, res) => { router.get('/values', isAuthenticated, async (req, res) => {
const { property } = req.query; const { property } = req.query;
getSalesOrderPropertyValuesRouteHandler(req, res, property); getSalesOrderPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, (req, res) => { router.get('/search', isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchSalesOrdersRouteHandler(req, res, search); searchSalesOrdersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, (req, res) => { router.post('/', isAuthenticated, async (req, res) => {
newSalesOrderRouteHandler(req, res); newSalesOrderRouteHandler(req, res);
}); });
// get sales order stats // get sales order stats
router.get('/stats', isAuthenticated, (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getSalesOrderStatsRouteHandler(req, res); getSalesOrderStatsRouteHandler(req, res);
}); });
// get sales orders history // get sales orders history
router.get('/history', isAuthenticated, (req, res) => { router.get('/history', isAuthenticated, async (req, res) => {
getSalesOrderHistoryRouteHandler(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 { 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); 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); getSalesOrderRouteHandler(req, res);
}); });

View File

@ -74,7 +74,7 @@ export async function exportToCsv({ objectType, filter = {}, sort, order, limit
export const csvExportRouteHandler = async (req, res) => { export const csvExportRouteHandler = async (req, res) => {
const objectType = req.params.objectType; const objectType = req.params.objectType;
const allowedFilters = getModelFilterFields(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 { sort, order } = parseOrderBy(req.query.$orderby);
const result = await exportToCsv({ 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) => { export const excelExportRouteHandler = async (req, res) => {
const objectType = req.params.objectType; const objectType = req.params.objectType;
const allowedFilters = getModelFilterFields(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 { sort, order } = parseOrderBy(req.query.$orderby);
const result = await exportToExcel({ const result = await exportToExcel({
@ -113,7 +113,7 @@ export const excelOpenRouteHandler = async (req, res) => {
const objectType = req.params.objectType; const objectType = req.params.objectType;
logger.info('[Excel Open] POST received', { objectType, query: req.query }); logger.info('[Excel Open] POST received', { objectType, query: req.query });
const allowedFilters = getModelFilterFields(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 { sort, order } = parseOrderBy(req.query.$orderby);
const entry = getModelByName(objectType); const entry = getModelByName(objectType);

View File

@ -247,7 +247,7 @@ ${entitySets}
* Route handler for GET /odata/$metadata * Route handler for GET /odata/$metadata
* Returns OData 4.0 CSDL metadata document for Power BI / OData clients. * 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(); const xml = buildMetadataXml();
res.set('OData-Version', '4.0'); res.set('OData-Version', '4.0');
res.set('Content-Type', 'application/xml'); 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 // Build filter from query params - allow common filter keys per model
const allowedFilters = getModelFilterFields(objectType); const allowedFilters = getModelFilterFields(objectType);
const filter = getFilter(req.query, allowedFilters); const filter = await getFilter(req.query, allowedFilters);
const result = await listObjectsOData({ const result = await listObjectsOData({
model: entry.model, model: entry.model,

View File

@ -91,7 +91,7 @@ export const listRssRouteHandler = async (req, res) => {
const page = Math.floor(skip / limit) + 1; const page = Math.floor(skip / limit) + 1;
const { sort, order } = parseOrderBy($orderby); const { sort, order } = parseOrderBy($orderby);
const allowedFilters = getModelFilterFields(objectType); const allowedFilters = getModelFilterFields(objectType);
const filter = getFilter(queryWithoutAuth, allowedFilters); const filter = await getFilter(queryWithoutAuth, allowedFilters);
const result = await listObjectsOData({ const result = await listObjectsOData({
model: entry.model, model: entry.model,

View File

@ -83,6 +83,108 @@ function isBooleanField(property, model = null) {
return found; 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) { function parseBooleanOperand(value) {
const lower = String(value).trim().toLowerCase(); const lower = String(value).trim().toLowerCase();
if (lower === 'yes') return true; if (lower === 'yes') return true;
@ -251,8 +353,14 @@ function stripIgnoreCase(str) {
} }
// Builds an equality condition (value, date range, or wildcard regex). // 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 (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) { if (isDateField) {
const start = parseDateOperand(value, 'start'); const start = parseDateOperand(value, 'start');
const end = parseDateOperand(value, 'end'); const end = parseDateOperand(value, 'end');
@ -263,12 +371,27 @@ function buildEquality(value, isDateField, isBooleanField = false) {
if (lower === 'false') return { value: false }; if (lower === 'false') return { value: false };
if (isObjectIdString(value)) return { value: new mongoose.Types.ObjectId(value) }; if (isObjectIdString(value)) return { value: new mongoose.Types.ObjectId(value) };
if (isNumeric(value)) return { value: Number(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. // 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 (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 === 'eq') return buildEquality(value, isDateField);
if (name === 'ne') { 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 (start && end) return { op: { $not: { $gte: start, $lte: end } } };
} }
if (/[*?]/.test(value)) { if (/[*?]/.test(value)) {
return { op: { $not: { $regex: buildWildcardRegexPattern(value), $options: 'i' } } }; return { op: { $not: buildRegexOp(buildWildcardRegexPattern(value)) } };
} }
return { op: { $ne: coerceScalar(value) } }; return { op: { $ne: coerceScalar(value) } };
} }
@ -288,33 +411,7 @@ function buildComparison(name, value, isDateField, isBooleanField = false) {
return { op: { [`$${name}`]: coerceBoundary(value, isDateField, boundary) } }; return { op: { [`$${name}`]: coerceBoundary(value, isDateField, boundary) } };
} }
// Parses a leaf token (range, comparison, or plain value) into a condition. function parseLeafComparisonOperators(token, isDateField, isBooleanField, isObjectIdField) {
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.
const operators = [ const operators = [
['<>', 'ne'], ['<>', 'ne'],
['>=', 'gte'], ['>=', 'gte'],
@ -329,12 +426,50 @@ function parseLeafCondition(rawToken, isDateField, isBooleanField = false) {
name, name,
stripIgnoreCase(token.slice(symbol.length).trim()), stripIgnoreCase(token.slice(symbol.length).trim()),
isDateField, 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`. // 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. // 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)) { if (children.every((child) => child.value !== undefined)) {
return { op: { $in: children.map((child) => child.value) } }; 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('|'); 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)) } }; 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') { if (node.type === 'leaf') {
return parseLeafCondition(node.token, isDateField, isBooleanField); return parseLeafCondition(node.token, isDateField, isBooleanField, isObjectIdField);
} }
const children = node.items.map((item) => 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 } // Normalize state filter to state.type for schemas with state: { type }
if (property === 'state') { if (property === 'state') {
property = 'state.type'; property = 'state.type';
} }
const fieldKind = getFilterFieldKind(property, model);
const filterProperty = fieldKind.property;
const isBoolField = isBooleanField(property, model); const isBoolField = isBooleanField(property, model);
if (value?._id !== undefined && value?._id !== null) { 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. // Non-string values pass through; boolean fields only accept actual booleans.
if (typeof value !== 'string') { if (typeof value !== 'string') {
if (isBoolField && typeof value !== 'boolean') { if (isBoolField && typeof value !== 'boolean') {
return { [property]: { $in: [] } }; return { [filterProperty]: { $in: [] } };
} }
return { [property]: value }; return { [filterProperty]: value };
} }
let trimmed = value.trim(); const trimmed = value.trim();
if (trimmed.charAt(3) === ':') {
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]; const afterColon = value.split(':')[1];
trimmed = afterColon != null ? afterColon.trim() : ''; expression = afterColon != null ? afterColon.trim() : '';
} }
const isDateField = looksLikeDateField(property); const isDateField = looksLikeDateField(property);
const tree = parseExpression(trimmed); const isObjectIdField = fieldKind.kind === 'objectId';
const condition = buildCondition(tree, property, isDateField, isBoolField); const tree = parseExpression(expression);
return conditionToQuery(condition, property); const condition = buildCondition(tree, filterProperty, isDateField, isBoolField, isObjectIdField);
return conditionToQuery(condition, filterProperty);
} }
function convertToCamelCase(obj) { function convertToCamelCase(obj) {
@ -1210,11 +1526,11 @@ function mergeFilterClauses(clauses) {
} }
// Returns a filter object based on allowed filters and req.query // 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 = []; const clauses = [];
for (const [key, value] of Object.entries(query)) { for (const [key, value] of Object.entries(query)) {
if (allowedFilters.includes(key)) { 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); return mergeFilterClauses(clauses);