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