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