Compare commits

..

No commits in common. "069406e4d8f7096014bacf19d8acb3777fe5731e" and "d3adf004776d6b6e3b0445947a1e300af46ef1a9" have entirely different histories.

54 changed files with 638 additions and 950 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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listInvoicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listInvoicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getInvoicePropertyValuesRouteHandler(req, res, property); getInvoicePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchInvoicesRouteHandler(req, res, search); searchInvoicesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newInvoiceRouteHandler(req, res); newInvoiceRouteHandler(req, res);
}); });
// get invoice stats // get invoice stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getInvoiceStatsRouteHandler(req, res); getInvoiceStatsRouteHandler(req, res);
}); });
// get invoice history // get invoice history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getInvoiceHistoryRouteHandler(req, res); getInvoiceHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listPaymentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listPaymentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getPaymentPropertyValuesRouteHandler(req, res, property); getPaymentPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPaymentsRouteHandler(req, res, search); searchPaymentsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newPaymentRouteHandler(req, res); newPaymentRouteHandler(req, res);
}); });
// get payment stats // get payment stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getPaymentStatsRouteHandler(req, res); getPaymentStatsRouteHandler(req, res);
}); });
// get payment history // get payment history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getPaymentHistoryRouteHandler(req, res); getPaymentHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listTaxRecordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listTaxRecordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getTaxRecordPropertyValuesRouteHandler(req, res, property); getTaxRecordPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchTaxRecordsRouteHandler(req, res, search); searchTaxRecordsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newTaxRecordRouteHandler(req, res); newTaxRecordRouteHandler(req, res);
}); });
// get tax record stats // get tax record stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getTaxRecordStatsRouteHandler(req, res); getTaxRecordStatsRouteHandler(req, res);
}); });
// get tax record history // get tax record history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getTaxRecordHistoryRouteHandler(req, res); getTaxRecordHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listFilamentStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listFilamentStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilamentStockPropertyValuesRouteHandler(req, res, property); getFilamentStockPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchFilamentStocksRouteHandler(req, res, search); searchFilamentStocksRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newFilamentStockRouteHandler(req, res); newFilamentStockRouteHandler(req, res);
}); });
// get filament stock stats // get filament stock stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getFilamentStockStatsRouteHandler(req, res); getFilamentStockStatsRouteHandler(req, res);
}); });
// get filament stock history // get filament stock history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getFilamentStockHistoryRouteHandler(req, res); getFilamentStockHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listOrderItemsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listOrderItemsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getOrderItemPropertyValuesRouteHandler(req, res, property); getOrderItemPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchOrderItemsRouteHandler(req, res, search); searchOrderItemsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newOrderItemRouteHandler(req, res); newOrderItemRouteHandler(req, res);
}); });
// get order item stats // get order item stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getOrderItemStatsRouteHandler(req, res); getOrderItemStatsRouteHandler(req, res);
}); });
// get order item history // get order item history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getOrderItemHistoryRouteHandler(req, res); getOrderItemHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listPartStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listPartStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getPartStockPropertyValuesRouteHandler(req, res, property); getPartStockPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPartStocksRouteHandler(req, res, search); searchPartStocksRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newPartStockRouteHandler(req, res); newPartStockRouteHandler(req, res);
}); });
// get part stock stats // get part stock stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getPartStockStatsRouteHandler(req, res); getPartStockStatsRouteHandler(req, res);
}); });
// get part stock history // get part stock history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getPartStockHistoryRouteHandler(req, res); getPartStockHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listProductStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listProductStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getProductStockPropertyValuesRouteHandler(req, res, property); getProductStockPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchProductStocksRouteHandler(req, res, search); searchProductStocksRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newProductStockRouteHandler(req, res); newProductStockRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getProductStockStatsRouteHandler(req, res); getProductStockStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getProductStockHistoryRouteHandler(req, res); getProductStockHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = await getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true); masterFilter = getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true);
} }
listPurchaseOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listPurchaseOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getPurchaseOrderPropertyValuesRouteHandler(req, res, property); getPurchaseOrderPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPurchaseOrdersRouteHandler(req, res, search); searchPurchaseOrdersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newPurchaseOrderRouteHandler(req, res); newPurchaseOrderRouteHandler(req, res);
}); });
// get purchase order stats // get purchase order stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getPurchaseOrderStatsRouteHandler(req, res); getPurchaseOrderStatsRouteHandler(req, res);
}); });
// get purchase order history // get purchase order history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getPurchaseOrderHistoryRouteHandler(req, res); getPurchaseOrderHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = await getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true); masterFilter = getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true);
} }
listShipmentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listShipmentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getShipmentPropertyValuesRouteHandler(req, res, property); getShipmentPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchShipmentsRouteHandler(req, res, search); searchShipmentsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newShipmentRouteHandler(req, res); newShipmentRouteHandler(req, res);
}); });
// get shipment stats // get shipment stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getShipmentStatsRouteHandler(req, res); getShipmentStatsRouteHandler(req, res);
}); });
// get shipment history // get shipment history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getShipmentHistoryRouteHandler(req, res); getShipmentHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (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, 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 < listAllowedFilters.length; i++) { for (var i = 0; i < listAllowedFilters.length; i++) {
if (key == listAllowedFilters[i]) { if (key == listAllowedFilters[i]) {
const parsedFilter = await parseFilter(key, value); const parsedFilter = parseFilter(key, value);
filter = { ...filter, ...parsedFilter }; filter = { ...filter, ...parsedFilter };
} }
} }
@ -44,43 +44,43 @@ router.get('/', isAuthenticated, async (req, res) => {
}); });
// Create new stock audit // Create new stock audit
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newStockAuditRouteHandler(req, res); newStockAuditRouteHandler(req, res);
}); });
// get stock audit stats // get stock audit stats
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchStockAuditsRouteHandler(req, res, search); searchStockAuditsRouteHandler(req, res, search);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getStockAuditStatsRouteHandler(req, res); getStockAuditStatsRouteHandler(req, res);
}); });
// get stock audit history // get stock audit history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getStockAuditHistoryRouteHandler(req, res); getStockAuditHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (req, res) => {
getStockAuditRouteHandler(req, res); getStockAuditRouteHandler(req, res);
}); });
// Update stock audit // Update stock audit
router.put('/:id', isAuthenticated, async (req, res) => { router.put('/:id', isAuthenticated, (req, res) => {
updateStockAuditRouteHandler(req, res); updateStockAuditRouteHandler(req, res);
}); });
// Delete stock audit // Delete stock audit
router.delete('/:id', isAuthenticated, async (req, res) => { router.delete('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, sort, order } = req.query; const { page, limit, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = getFilter(req.query, listAllowedFilters);
listStockEventsRouteHandler(req, res, page, limit, filter, sort, order); listStockEventsRouteHandler(req, res, page, limit, filter, sort, order);
}); });
router.get('/properties', isAuthenticated, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listStockEventsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listStockEventsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getStockEventPropertyValuesRouteHandler(req, res, property); getStockEventPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchStockEventsRouteHandler(req, res, search); searchStockEventsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newStockEventRouteHandler(req, res); newStockEventRouteHandler(req, res);
}); });
// get stock event stats // get stock event stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getStockEventStatsRouteHandler(req, res); getStockEventStatsRouteHandler(req, res);
}); });
// get stock event history // get stock event history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getStockEventHistoryRouteHandler(req, res); getStockEventHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listStockLocationsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listStockLocationsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getStockLocationPropertyValuesRouteHandler(req, res, property); getStockLocationPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchStockLocationsRouteHandler(req, res, search); searchStockLocationsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newStockLocationRouteHandler(req, res); newStockLocationRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getStockLocationStatsRouteHandler(req, res); getStockLocationStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getStockLocationHistoryRouteHandler(req, res); getStockLocationHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listStockTransfersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listStockTransfersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getStockTransferPropertyValuesRouteHandler(req, res, property); getStockTransferPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchStockTransfersRouteHandler(req, res, search); searchStockTransfersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newStockTransferRouteHandler(req, res); newStockTransferRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getStockTransferStatsRouteHandler(req, res); getStockTransferStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getStockTransferHistoryRouteHandler(req, res); getStockTransferHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
const properties = convertPropertiesString(req.query.properties); const properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getAppPasswordPropertyValuesRouteHandler(req, res, property); getAppPasswordPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchAppPasswordsRouteHandler(req, res, search); searchAppPasswordsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newAppPasswordRouteHandler(req, res); newAppPasswordRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getAppPasswordStatsRouteHandler(req, res); getAppPasswordStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (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, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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 = await parseFilter(key, value); const parsedFilter = 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, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchAuditLogsRouteHandler(req, res, search); searchAuditLogsRouteHandler(req, res, search);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getAuditLogStatsRouteHandler(req, res); getAuditLogStatsRouteHandler(req, res);
}); });
// get audit log history // get audit log history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listCouriersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listCouriersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getCourierPropertyValuesRouteHandler(req, res, property); getCourierPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchCouriersRouteHandler(req, res, search); searchCouriersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newCourierRouteHandler(req, res); newCourierRouteHandler(req, res);
}); });
// get courier stats // get courier stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getCourierStatsRouteHandler(req, res); getCourierStatsRouteHandler(req, res);
}); });
// get courier history // get courier history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getCourierHistoryRouteHandler(req, res); getCourierHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listCourierServicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listCourierServicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getCourierServicePropertyValuesRouteHandler(req, res, property); getCourierServicePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchCourierServicesRouteHandler(req, res, search); searchCourierServicesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newCourierServiceRouteHandler(req, res); newCourierServiceRouteHandler(req, res);
}); });
// get courier service stats // get courier service stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getCourierServiceStatsRouteHandler(req, res); getCourierServiceStatsRouteHandler(req, res);
}); });
// get courierservice history // get courierservice history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getCourierServiceHistoryRouteHandler(req, res); getCourierServiceHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listDocumentJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listDocumentJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getDocumentJobPropertyValuesRouteHandler(req, res, property); getDocumentJobPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchDocumentJobsRouteHandler(req, res, search); searchDocumentJobsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newDocumentJobRouteHandler(req, res); newDocumentJobRouteHandler(req, res);
}); });
// get document job stats // get document job stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getDocumentJobStatsRouteHandler(req, res); getDocumentJobStatsRouteHandler(req, res);
}); });
// get documentjobs history // get documentjobs history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getDocumentJobHistoryRouteHandler(req, res); getDocumentJobHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listDocumentPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listDocumentPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getDocumentPrinterPropertyValuesRouteHandler(req, res, property); getDocumentPrinterPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchDocumentPrintersRouteHandler(req, res, search); searchDocumentPrintersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newDocumentPrinterRouteHandler(req, res); newDocumentPrinterRouteHandler(req, res);
}); });
// get document printer stats // get document printer stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getDocumentPrinterStatsRouteHandler(req, res); getDocumentPrinterStatsRouteHandler(req, res);
}); });
// get documentprinters history // get documentprinters history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getDocumentPrinterHistoryRouteHandler(req, res); getDocumentPrinterHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listDocumentSizesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listDocumentSizesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getDocumentSizePropertyValuesRouteHandler(req, res, property); getDocumentSizePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchDocumentSizesRouteHandler(req, res, search); searchDocumentSizesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newDocumentSizeRouteHandler(req, res); newDocumentSizeRouteHandler(req, res);
}); });
// get document size stats // get document size stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getDocumentSizeStatsRouteHandler(req, res); getDocumentSizeStatsRouteHandler(req, res);
}); });
// get documentsizes history // get documentsizes history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getDocumentSizeHistoryRouteHandler(req, res); getDocumentSizeHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listDocumentTemplatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listDocumentTemplatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getDocumentTemplatePropertyValuesRouteHandler(req, res, property); getDocumentTemplatePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchDocumentTemplatesRouteHandler(req, res, search); searchDocumentTemplatesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newDocumentTemplateRouteHandler(req, res); newDocumentTemplateRouteHandler(req, res);
}); });
// get document template stats // get document template stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getDocumentTemplateStatsRouteHandler(req, res); getDocumentTemplateStatsRouteHandler(req, res);
}); });
// get document template history // get document template history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getDocumentTemplateHistoryRouteHandler(req, res); getDocumentTemplateHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (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, 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 < listAllowedFilters.length; i++) { for (var i = 0; i < listAllowedFilters.length; i++) {
if (key == listAllowedFilters[i]) { if (key == listAllowedFilters[i]) {
filter = { ...filter, ...(await parseFilter(key, value)) }; filter = { ...filter, ...parseFilter(key, value) };
} }
} }
} }
@ -50,9 +50,9 @@ router.get('/', isAuthenticated, async (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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listFilamentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listFilamentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilamentPropertyValuesRouteHandler(req, res, property); getFilamentPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchFilamentsRouteHandler(req, res, search); searchFilamentsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newFilamentRouteHandler(req, res); newFilamentRouteHandler(req, res);
}); });
// get filament stats // get filament stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getFilamentStatsRouteHandler(req, res); getFilamentStatsRouteHandler(req, res);
}); });
// get filaments history // get filaments history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getFilamentHistoryRouteHandler(req, res); getFilamentHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listFilamentSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listFilamentSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilamentSkuPropertyValuesRouteHandler(req, res, property); getFilamentSkuPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchFilamentSkusRouteHandler(req, res, search); searchFilamentSkusRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newFilamentSkuRouteHandler(req, res); newFilamentSkuRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getFilamentSkuStatsRouteHandler(req, res); getFilamentSkuStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getFilamentSkuHistoryRouteHandler(req, res); getFilamentSkuHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilePropertyValuesRouteHandler(req, res, property); getFilePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchFilesRouteHandler(req, res, search); searchFilesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newFileRouteHandler(req, res); newFileRouteHandler(req, res);
}); });
// get file stats // get file stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getFileStatsRouteHandler(req, res); getFileStatsRouteHandler(req, res);
}); });
// get file history // get file history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getFileHistoryRouteHandler(req, res); getFileHistoryRouteHandler(req, res);
}); });
router.delete('/:id/flush', isAuthenticated, async (req, res) => { router.delete('/:id/flush', isAuthenticated, (req, res) => {
flushFileRouteHandler(req, res); flushFileRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (req, res) => {
getFileRouteHandler(req, res); getFileRouteHandler(req, res);
}); });
router.get('/:id/content', isAuthenticated, async (req, res) => { router.get('/:id/content', isAuthenticated, (req, res) => {
getFileContentRouteHandler(req, res); getFileContentRouteHandler(req, res);
}); });
router.get('/:id/thumbnail', isAuthenticated, async (req, res) => { router.get('/:id/thumbnail', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listHostsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listHostsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getHostPropertyValuesRouteHandler(req, res, property); getHostPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchHostsRouteHandler(req, res, search); searchHostsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newHostRouteHandler(req, res); newHostRouteHandler(req, res);
}); });
// get host stats // get host stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getHostStatsRouteHandler(req, res); getHostStatsRouteHandler(req, res);
}); });
// get hosts history // get hosts history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getHostHistoryRouteHandler(req, res); getHostHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (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, async (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, ...(await parseFilter(key, value)) }; filter = { ...filter, ...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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listMaterialsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listMaterialsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getMaterialPropertyValuesRouteHandler(req, res, property); getMaterialPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchMaterialsRouteHandler(req, res, search); searchMaterialsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newMaterialRouteHandler(req, res); newMaterialRouteHandler(req, res);
}); });
// get material stats // get material stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getMaterialStatsRouteHandler(req, res); getMaterialStatsRouteHandler(req, res);
}); });
// get materials history // get materials history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getMaterialHistoryRouteHandler(req, res); getMaterialHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listNoteTypesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listNoteTypesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getNoteTypePropertyValuesRouteHandler(req, res, property); getNoteTypePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchNoteTypesRouteHandler(req, res, search); searchNoteTypesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newNoteTypeRouteHandler(req, res); newNoteTypeRouteHandler(req, res);
}); });
// get note type stats // get note type stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getNoteTypeStatsRouteHandler(req, res); getNoteTypeStatsRouteHandler(req, res);
}); });
// get notetypes history // get notetypes history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getNoteTypeHistoryRouteHandler(req, res); getNoteTypeHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listPartsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listPartsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getPartPropertyValuesRouteHandler(req, res, property); getPartPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPartsRouteHandler(req, res, search); searchPartsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newPartRouteHandler(req, res); newPartRouteHandler(req, res);
}); });
// get part stats // get part stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getPartStatsRouteHandler(req, res); getPartStatsRouteHandler(req, res);
}); });
// get parts history // get parts history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getPartHistoryRouteHandler(req, res); getPartHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listPartSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listPartSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getPartSkuPropertyValuesRouteHandler(req, res, property); getPartSkuPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPartSkusRouteHandler(req, res, search); searchPartSkusRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newPartSkuRouteHandler(req, res); newPartSkuRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getPartSkuStatsRouteHandler(req, res); getPartSkuStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getPartSkuHistoryRouteHandler(req, res); getPartSkuHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
const properties = convertPropertiesString(req.query.properties); const properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listProductCategoriesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listProductCategoriesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getProductCategoryPropertyValuesRouteHandler(req, res, property); getProductCategoryPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchProductCategoriesRouteHandler(req, res, search); searchProductCategoriesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newProductCategoryRouteHandler(req, res); newProductCategoryRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getProductCategoryStatsRouteHandler(req, res); getProductCategoryStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getProductCategoryHistoryRouteHandler(req, res); getProductCategoryHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listProductsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listProductsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getProductPropertyValuesRouteHandler(req, res, property); getProductPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchProductsRouteHandler(req, res, search); searchProductsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newProductRouteHandler(req, res); newProductRouteHandler(req, res);
}); });
// get product stats // get product stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getProductStatsRouteHandler(req, res); getProductStatsRouteHandler(req, res);
}); });
// get products history // get products history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getProductHistoryRouteHandler(req, res); getProductHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listProductSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listProductSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getProductSkuPropertyValuesRouteHandler(req, res, property); getProductSkuPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchProductSkusRouteHandler(req, res, search); searchProductSkusRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newProductSkuRouteHandler(req, res); newProductSkuRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getProductSkuStatsRouteHandler(req, res); getProductSkuStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getProductSkuHistoryRouteHandler(req, res); getProductSkuHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listTaxRatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listTaxRatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getTaxRatePropertyValuesRouteHandler(req, res, property); getTaxRatePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchTaxRatesRouteHandler(req, res, search); searchTaxRatesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newTaxRateRouteHandler(req, res); newTaxRateRouteHandler(req, res);
}); });
// get tax rate stats // get tax rate stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getTaxRateStatsRouteHandler(req, res); getTaxRateStatsRouteHandler(req, res);
}); });
// get tax rate history // get tax rate history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getTaxRateHistoryRouteHandler(req, res); getTaxRateHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listUsersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listUsersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getUserPropertyValuesRouteHandler(req, res, property); getUserPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (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, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getUserStatsRouteHandler(req, res); getUserStatsRouteHandler(req, res);
}); });
// get user history // get user history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getUserHistoryRouteHandler(req, res); getUserHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listVendorsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listVendorsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getVendorPropertyValuesRouteHandler(req, res, property); getVendorPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchVendorsRouteHandler(req, res, search); searchVendorsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newVendorRouteHandler(req, res); newVendorRouteHandler(req, res);
}); });
// get vendor stats // get vendor stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getVendorStatsRouteHandler(req, res); getVendorStatsRouteHandler(req, res);
}); });
// get vendors history // get vendors history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getVendorHistoryRouteHandler(req, res); getVendorHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listNotesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listNotesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (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, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newNoteRouteHandler(req, res); newNoteRouteHandler(req, res);
}); });
// get note stats // get note stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getNoteStatsRouteHandler(req, res); getNoteStatsRouteHandler(req, res);
}); });
// get note history // get note history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getNoteHistoryRouteHandler(req, res); getNoteHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (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 = await getFilter(req.query, allowedFilters); const filter = 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, async (req, res) => { router.put('/read-all', isAuthenticated, (req, res) => {
markAllNotificationsAsReadRouteHandler(req, res); markAllNotificationsAsReadRouteHandler(req, res);
}); });
router.put('/:id/read', isAuthenticated, async (req, res) => { router.put('/:id/read', isAuthenticated, (req, res) => {
markNotificationAsReadRouteHandler(req, res); markNotificationAsReadRouteHandler(req, res);
}); });
router.delete('/', isAuthenticated, async (req, res) => { router.delete('/', isAuthenticated, (req, res) => {
deleteAllNotificationsRouteHandler(req, res); deleteAllNotificationsRouteHandler(req, res);
}); });
router.delete('/:id', isAuthenticated, async (req, res) => { router.delete('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (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 = await getFilter(req.query, allowedFilters); const filter = 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, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newUserNotifierRouteHandler(req, res); newUserNotifierRouteHandler(req, res);
}); });
router.get('/:id', isAuthenticated, async (req, res) => { router.get('/:id', isAuthenticated, (req, res) => {
getUserNotifierRouteHandler(req, res); getUserNotifierRouteHandler(req, res);
}); });
router.put('/:id', isAuthenticated, async (req, res) => { router.put('/:id', isAuthenticated, (req, res) => {
editUserNotifierRouteHandler(req, res); editUserNotifierRouteHandler(req, res);
}); });
router.delete('/:id', isAuthenticated, async (req, res) => { router.delete('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
const properties = convertPropertiesString(req.query.properties); const properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listFilamentProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listFilamentProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getFilamentProfilePropertyValuesRouteHandler(req, res, property); getFilamentProfilePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
searchFilamentProfilesRouteHandler(req, res, req.query.search); searchFilamentProfilesRouteHandler(req, res, req.query.search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newFilamentProfileRouteHandler(req, res); newFilamentProfileRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (req, res) => {
getFilamentProfileRouteHandler(req, res); getFilamentProfileRouteHandler(req, res);
}); });
router.put('/:id', isAuthenticated, async (req, res) => { router.put('/:id', isAuthenticated, (req, res) => {
editFilamentProfileRouteHandler(req, res); editFilamentProfileRouteHandler(req, res);
}); });
router.delete('/:id', isAuthenticated, async (req, res) => { router.delete('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listGCodeFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listGCodeFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getGCodeFilePropertyValuesRouteHandler(req, res, property); getGCodeFilePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (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, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newGCodeFileRouteHandler(req, res); newGCodeFileRouteHandler(req, res);
}); });
// get gcodeFile stats // get gcodeFile stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getGCodeFileStatsRouteHandler(req, res); getGCodeFileStatsRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (req, res) => {
getGCodeFileRouteHandler(req, res); getGCodeFileRouteHandler(req, res);
}); });
router.get('/:id/content', isAuthenticated, async (req, res) => { router.get('/:id/content', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getJobPropertyValuesRouteHandler(req, res, property); getJobPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchJobsRouteHandler(req, res, search); searchJobsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newJobRouteHandler(req, res); newJobRouteHandler(req, res);
}); });
// get job stats // get job stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getJobStatsRouteHandler(req, res); getJobStatsRouteHandler(req, res);
}); });
// get job history // get job history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getJobHistoryRouteHandler(req, res); getJobHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
const properties = convertPropertiesString(req.query.properties); const properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listPrinterProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listPrinterProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getPrinterProfilePropertyValuesRouteHandler(req, res, property); getPrinterProfilePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
searchPrinterProfilesRouteHandler(req, res, req.query.search); searchPrinterProfilesRouteHandler(req, res, req.query.search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newPrinterProfileRouteHandler(req, res); newPrinterProfileRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (req, res) => {
getPrinterProfileRouteHandler(req, res); getPrinterProfileRouteHandler(req, res);
}); });
router.put('/:id', isAuthenticated, async (req, res) => { router.put('/:id', isAuthenticated, (req, res) => {
editPrinterProfileRouteHandler(req, res); editPrinterProfileRouteHandler(req, res);
}); });
router.delete('/:id', isAuthenticated, async (req, res) => { router.delete('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getPrinterPropertyValuesRouteHandler(req, res, property); getPrinterPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (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, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newPrinterRouteHandler(req, res); newPrinterRouteHandler(req, res);
}); });
// get printer history // get printer history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getPrinterHistoryRouteHandler(req, res); getPrinterHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getPrinterStatsRouteHandler(req, res); getPrinterStatsRouteHandler(req, res);
}); });
router.get('/:id', isAuthenticated, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listSubJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listSubJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getSubJobPropertyValuesRouteHandler(req, res, property); getSubJobPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (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, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getSubJobStatsRouteHandler(req, res); getSubJobStatsRouteHandler(req, res);
}); });
// get sub job history // get sub job history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getSubJobHistoryRouteHandler(req, res); getSubJobHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listClientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listClientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getClientPropertyValuesRouteHandler(req, res, property); getClientPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchClientsRouteHandler(req, res, search); searchClientsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newClientRouteHandler(req, res); newClientRouteHandler(req, res);
}); });
// get client stats // get client stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getClientStatsRouteHandler(req, res); getClientStatsRouteHandler(req, res);
}); });
// get clients history // get clients history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getClientHistoryRouteHandler(req, res); getClientHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listListingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listListingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getListingPropertyValuesRouteHandler(req, res, property); getListingPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchListingsRouteHandler(req, res, search); searchListingsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newListingRouteHandler(req, res); newListingRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getListingStatsRouteHandler(req, res); getListingStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getListingHistoryRouteHandler(req, res); getListingHistoryRouteHandler(req, res);
}); });
router.post('/:id/publish', isAuthenticated, async (req, res) => { router.post('/:id/publish', isAuthenticated, (req, res) => {
publishListingRouteHandler(req, res); publishListingRouteHandler(req, res);
}); });
router.post('/:id/unpublish', isAuthenticated, async (req, res) => { router.post('/:id/unpublish', isAuthenticated, (req, res) => {
unpublishListingRouteHandler(req, res); unpublishListingRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listListingVarientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listListingVarientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getListingVarientPropertyValuesRouteHandler(req, res, property); getListingVarientPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchListingVarientsRouteHandler(req, res, search); searchListingVarientsRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newListingVarientRouteHandler(req, res); newListingVarientRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getListingVarientStatsRouteHandler(req, res); getListingVarientStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getListingVarientHistoryRouteHandler(req, res); getListingVarientHistoryRouteHandler(req, res);
}); });
router.post('/:id/publish', isAuthenticated, async (req, res) => { router.post('/:id/publish', isAuthenticated, (req, res) => {
publishListingVarientRouteHandler(req, res); publishListingVarientRouteHandler(req, res);
}); });
router.post('/:id/unpublish', isAuthenticated, async (req, res) => { router.post('/:id/unpublish', isAuthenticated, (req, res) => {
unpublishListingVarientRouteHandler(req, res); unpublishListingVarientRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = 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, async (req, res) => {
listMarketplacesByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listMarketplacesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getMarketplacePropertyValuesRouteHandler(req, res, property); getMarketplacePropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchMarketplacesRouteHandler(req, res, search); searchMarketplacesRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newMarketplaceRouteHandler(req, res); newMarketplaceRouteHandler(req, res);
}); });
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getMarketplaceStatsRouteHandler(req, res); getMarketplaceStatsRouteHandler(req, res);
}); });
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getMarketplaceHistoryRouteHandler(req, res); getMarketplaceHistoryRouteHandler(req, res);
}); });
router.get('/:id/auth/url', isAuthenticated, async (req, res) => { router.get('/:id/auth/url', isAuthenticated, (req, res) => {
getMarketplaceAuthUrlRouteHandler(req, res); getMarketplaceAuthUrlRouteHandler(req, res);
}); });
router.post('/:id/auth/exchange', isAuthenticated, async (req, res) => { router.post('/:id/auth/exchange', isAuthenticated, (req, res) => {
exchangeMarketplaceAuthCodeRouteHandler(req, res); exchangeMarketplaceAuthCodeRouteHandler(req, res);
}); });
router.post('/:id/auth/refresh', isAuthenticated, async (req, res) => { router.post('/:id/auth/refresh', isAuthenticated, (req, res) => {
refreshMarketplaceAuthRouteHandler(req, res); refreshMarketplaceAuthRouteHandler(req, res);
}); });
router.post('/:id/sync/items', isAuthenticated, async (req, res) => { router.post('/:id/sync/items', isAuthenticated, (req, res) => {
syncMarketplaceItemsRouteHandler(req, res); syncMarketplaceItemsRouteHandler(req, res);
}); });
router.post('/:id/sync/orders', isAuthenticated, async (req, res) => { router.post('/:id/sync/orders', isAuthenticated, (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', async (req, res) => { router.post('/:id/hook', (req, res) => {
marketplaceWebhookRouteHandler(req, res); marketplaceWebhookRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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, async (req, res) => { router.get('/', isAuthenticated, (req, res) => {
const { page, limit, property, search, sort, order } = req.query; const { page, limit, property, search, sort, order } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/properties', isAuthenticated, (req, res) => {
let properties = convertPropertiesString(req.query.properties); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false); const filter = getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = await getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true); masterFilter = getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true);
} }
listSalesOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter); listSalesOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
}); });
router.get('/values', isAuthenticated, async (req, res) => { router.get('/values', isAuthenticated, (req, res) => {
const { property } = req.query; const { property } = req.query;
getSalesOrderPropertyValuesRouteHandler(req, res, property); getSalesOrderPropertyValuesRouteHandler(req, res, property);
}); });
router.get('/search', isAuthenticated, async (req, res) => { router.get('/search', isAuthenticated, (req, res) => {
const { search } = req.query; const { search } = req.query;
searchSalesOrdersRouteHandler(req, res, search); searchSalesOrdersRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, async (req, res) => { router.post('/', isAuthenticated, (req, res) => {
newSalesOrderRouteHandler(req, res); newSalesOrderRouteHandler(req, res);
}); });
// get sales order stats // get sales order stats
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, (req, res) => {
getSalesOrderStatsRouteHandler(req, res); getSalesOrderStatsRouteHandler(req, res);
}); });
// get sales orders history // get sales orders history
router.get('/history', isAuthenticated, async (req, res) => { router.get('/history', isAuthenticated, (req, res) => {
getSalesOrderHistoryRouteHandler(req, res); getSalesOrderHistoryRouteHandler(req, res);
}); });
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, (req, res) => {
const { property, search, sort, order, id } = req.query; const { property, search, sort, order, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = 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, async (req, res) => { router.get('/:id', isAuthenticated, (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 = await getFilter(req.query, allowedFilters); const filter = 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 = await getFilter(req.query, allowedFilters); const filter = 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 = await getFilter(req.query, allowedFilters); const filter = 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 = async (req, res) => { export const metadataODataRouteHandler = (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 = await getFilter(req.query, allowedFilters); const filter = 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 = await getFilter(queryWithoutAuth, allowedFilters); const filter = getFilter(queryWithoutAuth, allowedFilters);
const result = await listObjectsOData({ const result = await listObjectsOData({
model: entry.model, model: entry.model,

View File

@ -83,108 +83,6 @@ 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;
@ -353,14 +251,8 @@ 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, isObjectIdField = false) { function buildEquality(value, isDateField, isBooleanField = 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');
@ -371,27 +263,12 @@ function buildEquality(value, isDateField, isBooleanField = false, isObjectIdFie
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: buildRegexOp(buildWildcardRegexPattern(value)) }; return { op: { $regex: buildWildcardRegexPattern(value), $options: 'i' } };
} }
// Builds a comparison condition for a single operator. // Builds a comparison condition for a single operator.
function buildComparison( function buildComparison(name, value, isDateField, isBooleanField = false) {
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') {
@ -401,7 +278,7 @@ function buildComparison(
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: buildRegexOp(buildWildcardRegexPattern(value)) } }; return { op: { $not: { $regex: buildWildcardRegexPattern(value), $options: 'i' } } };
} }
return { op: { $ne: coerceScalar(value) } }; return { op: { $ne: coerceScalar(value) } };
} }
@ -411,7 +288,33 @@ function buildComparison(
return { op: { [`$${name}`]: coerceBoundary(value, isDateField, boundary) } }; return { op: { [`$${name}`]: coerceBoundary(value, isDateField, boundary) } };
} }
function parseLeafComparisonOperators(token, isDateField, isBooleanField, isObjectIdField) { // Parses a leaf token (range, comparison, or plain value) into a condition.
function parseLeafCondition(rawToken, isDateField, isBooleanField = false) {
const token = rawToken.trim();
if (token === '') {
if (isBooleanField) return NO_MATCH_CONDITION;
return { op: { $regex: '^$', $options: 'i' } };
}
// Interval: a..b, ..b, a..
const rangeIdx = token.indexOf('..');
if (rangeIdx !== -1) {
if (isBooleanField) {
const lo = stripIgnoreCase(token.slice(0, rangeIdx).trim());
const hi = stripIgnoreCase(token.slice(rangeIdx + 2).trim());
if (lo !== '' || hi !== '') return NO_MATCH_CONDITION;
}
const lo = stripIgnoreCase(token.slice(0, rangeIdx).trim());
const hi = stripIgnoreCase(token.slice(rangeIdx + 2).trim());
const op = {};
if (lo !== '') op.$gte = coerceBoundary(lo, isDateField, 'start');
if (hi !== '') op.$lte = coerceBoundary(hi, isDateField, 'end');
// A bare ".." places no constraint on the field.
if (Object.keys(op).length === 0) return { query: {} };
return { op };
}
// Comparison operators, longest symbols first.
const operators = [ const operators = [
['<>', 'ne'], ['<>', 'ne'],
['>=', 'gte'], ['>=', 'gte'],
@ -426,50 +329,12 @@ function parseLeafComparisonOperators(token, isDateField, isBooleanField, isObje
name, name,
stripIgnoreCase(token.slice(symbol.length).trim()), stripIgnoreCase(token.slice(symbol.length).trim()),
isDateField, isDateField,
isBooleanField, isBooleanField
isObjectIdField
); );
} }
} }
return null;
}
// Parses a leaf token (range, comparison, or plain value) into a condition. return buildEquality(stripIgnoreCase(token), isDateField, isBooleanField);
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`.
@ -500,234 +365,57 @@ 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, isObjectIdField = false) { function combineOr(children, property) {
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 (!isObjectIdField && children.every((child) => child.op && isOnlyRegex(child.op))) { if (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('|');
const op = { $regex: pattern }; return { op: { $regex: pattern, $options: 'i' } };
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( function buildCondition(node, property, isDateField, isBooleanField = false) {
node,
property,
isDateField,
isBooleanField = false,
isObjectIdField = false
) {
if (node.type === 'leaf') { if (node.type === 'leaf') {
return parseLeafCondition(node.token, isDateField, isBooleanField, isObjectIdField); return parseLeafCondition(node.token, isDateField, isBooleanField);
} }
const children = node.items.map((item) => const children = node.items.map((item) =>
buildCondition(item, property, isDateField, isBooleanField, isObjectIdField) buildCondition(item, property, isDateField, isBooleanField)
); );
return node.type === 'and' return node.type === 'and' ? combineAnd(children, property) : combineOr(children, property);
? combineAnd(children, property)
: combineOr(children, property, isObjectIdField);
} }
function idsToCondition(ids) { function parseFilter(property, value, model = null) {
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);
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 { [filterProperty]: new mongoose.Types.ObjectId(value._id) }; return { [property]: { _id: 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 { [filterProperty]: { $in: [] } }; return { [property]: { $in: [] } };
} }
return { [filterProperty]: value }; return { [property]: value };
} }
const trimmed = value.trim(); let trimmed = value.trim();
if (trimmed.charAt(3) === ':') {
if (fieldKind.kind === 'objectId' && property != '_id') {
const refName = fieldKind.ref ?? getSchemaRefName(property, model);
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];
expression = afterColon != null ? afterColon.trim() : ''; trimmed = afterColon != null ? afterColon.trim() : '';
} }
const isDateField = looksLikeDateField(property); const isDateField = looksLikeDateField(property);
const isObjectIdField = fieldKind.kind === 'objectId'; const tree = parseExpression(trimmed);
const tree = parseExpression(expression); const condition = buildCondition(tree, property, isDateField, isBoolField);
const condition = buildCondition(tree, filterProperty, isDateField, isBoolField, isObjectIdField); return conditionToQuery(condition, property);
return conditionToQuery(condition, filterProperty);
} }
function convertToCamelCase(obj) { function convertToCamelCase(obj) {
@ -1522,11 +1210,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
async function getFilter(query, allowedFilters, parse = true, model = null) { 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 ? await parseFilter(key, value, model) : { [key]: value }); clauses.push(parse ? parseFilter(key, value, model) : { [key]: value });
} }
} }
return mergeFilterClauses(clauses); return mergeFilterClauses(clauses);