Enhance allowed filters and sorters in management routes to include 'overrideCost' and 'overridePrice'

This commit updates the allowed filters and sorters in the filament, part, and product SKU management routes to include 'overrideCost' and 'overridePrice'. Additionally, it refactors the route handlers for improved readability and consistency. These changes aim to enhance data retrieval capabilities and maintain a consistent structure across the management routes.
This commit is contained in:
Tom Butcher 2026-09-04 01:33:43 +01:00
parent 91eb22ac49
commit 9f5b390771
3 changed files with 148 additions and 77 deletions

View File

@ -13,6 +13,7 @@ const listAllowedFilters = [
'name', 'name',
'color', 'color',
'cost', 'cost',
'overrideCost',
'costWithTax', 'costWithTax',
'createdAt', 'createdAt',
'updatedAt', 'updatedAt',
@ -25,6 +26,7 @@ const listAllowedSorters = [
'color', 'color',
'cost', 'cost',
'costWithTax', 'costWithTax',
'overrideCost',
'createdAt', 'createdAt',
'updatedAt', 'updatedAt',
]; ];
@ -46,18 +48,33 @@ import {
router.get('/', isAuthenticated, checkPermissions('filamentSku', 'list'), async (req, res) => { router.get('/', isAuthenticated, checkPermissions('filamentSku', 'list'), async (req, res) => {
const { page, limit, property, search, sortProperty, sortOrder } = req.query; const { page, limit, property, search, sortProperty, sortOrder } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = await getFilter(req.query, listAllowedFilters);
listFilamentSkusRouteHandler(req, res, page, limit, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder); listFilamentSkusRouteHandler(
req,
res,
page,
limit,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder
);
}); });
router.get('/properties', checkPermissions('filamentSku', 'list'), isAuthenticated, async (req, res) => { router.get(
let properties = convertPropertiesString(req.query.properties); '/properties',
const filter = await getFilter(req.query, propertiesAllowedFilters, false); checkPermissions('filamentSku', 'list'),
let masterFilter = {}; isAuthenticated,
if (req.query.masterFilter) { async (req, res) => {
masterFilter = JSON.parse(req.query.masterFilter); let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false);
let masterFilter = {};
if (req.query.masterFilter) {
masterFilter = JSON.parse(req.query.masterFilter);
}
listFilamentSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
} }
listFilamentSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter); );
});
router.get( router.get(
'/values', '/values',
@ -68,23 +85,29 @@ router.get(
const filter = await getFilter(req.query, listAllowedFilters, true); const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {}; var masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = await getFilter( masterFilter = await getFilter(JSON.parse(req.query.masterFilter), listAllowedFilters, true);
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
} }
getFilamentSkuPropertyValuesRouteHandler(req, res, property, filter, masterFilter); getFilamentSkuPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
} }
); );
router.get('/search', checkPermissions('filamentSku', 'list'), isAuthenticated, async (req, res) => { router.get(
const { search } = req.query; '/search',
searchFilamentSkusRouteHandler(req, res, search); checkPermissions('filamentSku', 'list'),
}); isAuthenticated,
async (req, res) => {
const { search } = req.query;
searchFilamentSkusRouteHandler(req, res, search);
}
);
router.post('/', isAuthenticated, checkPermissions('filament', 'newFilamentSku'), async (req, res) => { router.post(
newFilamentSkuRouteHandler(req, res); '/',
}); isAuthenticated,
checkPermissions('filament', 'newFilamentSku'),
async (req, res) => {
newFilamentSkuRouteHandler(req, res);
}
);
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getFilamentSkuStatsRouteHandler(req, res); getFilamentSkuStatsRouteHandler(req, res);
@ -97,7 +120,16 @@ router.get('/history', isAuthenticated, async (req, res) => {
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, async (req, res) => {
const { property, search, sortProperty, sortOrder, id } = req.query; const { property, search, sortProperty, sortOrder, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = await getFilter(req.query, listAllowedFilters);
getFilamentSkuNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); getFilamentSkuNeighborsRouteHandler(
req,
res,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder,
id
);
}); });
router.get('/:id', isAuthenticated, async (req, res) => { router.get('/:id', isAuthenticated, async (req, res) => {

View File

@ -12,8 +12,10 @@ const listAllowedFilters = [
'part._id', 'part._id',
'name', 'name',
'cost', 'cost',
'overrideCost',
'costWithTax', 'costWithTax',
'price', 'price',
'overridePrice',
'priceWithTax', 'priceWithTax',
'margin', 'margin',
'createdAt', 'createdAt',
@ -28,6 +30,8 @@ const listAllowedSorters = [
'costWithTax', 'costWithTax',
'price', 'price',
'priceWithTax', 'priceWithTax',
'overrideCost',
'overridePrice',
'margin', 'margin',
'createdAt', 'createdAt',
'updatedAt', 'updatedAt',
@ -44,50 +48,54 @@ import {
getPartSkuHistoryRouteHandler, getPartSkuHistoryRouteHandler,
searchPartSkusRouteHandler, searchPartSkusRouteHandler,
getPartSkuPropertyValuesRouteHandler, getPartSkuPropertyValuesRouteHandler,
getPartSkuNeighborsRouteHandler,
getPartSkuNeighborsRouteHandler
} from '../../services/management/partskus.js'; } from '../../services/management/partskus.js';
router.get('/', isAuthenticated, checkPermissions('partSku', 'list'), async (req, res) => { router.get('/', isAuthenticated, checkPermissions('partSku', 'list'), async (req, res) => {
const { page, limit, property, search, sortProperty, sortOrder } = req.query; const { page, limit, property, search, sortProperty, sortOrder } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = await getFilter(req.query, listAllowedFilters);
listPartSkusRouteHandler(req, res, page, limit, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder); listPartSkusRouteHandler(
}); req,
res,
router.get('/properties', checkPermissions('partSku', 'list'), isAuthenticated, async (req, res) => { page,
let properties = convertPropertiesString(req.query.properties); limit,
const filter = await getFilter(req.query, propertiesAllowedFilters, false); property,
let masterFilter = {}; filter,
if (req.query.masterFilter) { search,
masterFilter = JSON.parse(req.query.masterFilter); getSort(sortProperty, listAllowedSorters),
} sortOrder
listPartSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter); );
}); });
router.get( router.get(
'/values', '/properties',
checkPermissions('partSku', 'list'), checkPermissions('partSku', 'list'),
isAuthenticated, isAuthenticated,
async (req, res) => { async (req, res) => {
const { property } = req.query; let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, listAllowedFilters, true); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; let masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = await getFilter( masterFilter = JSON.parse(req.query.masterFilter);
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
} }
getPartSkuPropertyValuesRouteHandler(req, res, property, filter, masterFilter); listPartSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
} }
); );
router.get('/values', checkPermissions('partSku', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(JSON.parse(req.query.masterFilter), listAllowedFilters, true);
}
getPartSkuPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
});
router.get('/search', checkPermissions('partSku', 'list'), isAuthenticated, async (req, res) => { router.get('/search', checkPermissions('partSku', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchPartSkusRouteHandler(req, res, search); searchPartSkusRouteHandler(req, res, search);
}); });
router.post('/', isAuthenticated, checkPermissions('part', 'newPartSku'), async (req, res) => { router.post('/', isAuthenticated, checkPermissions('part', 'newPartSku'), async (req, res) => {
newPartSkuRouteHandler(req, res); newPartSkuRouteHandler(req, res);
}); });
@ -103,7 +111,16 @@ router.get('/history', isAuthenticated, async (req, res) => {
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, async (req, res) => {
const { property, search, sortProperty, sortOrder, id } = req.query; const { property, search, sortProperty, sortOrder, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = await getFilter(req.query, listAllowedFilters);
getPartSkuNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); getPartSkuNeighborsRouteHandler(
req,
res,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder,
id
);
}); });
router.get('/:id', isAuthenticated, async (req, res) => { router.get('/:id', isAuthenticated, async (req, res) => {

View File

@ -12,6 +12,8 @@ const listAllowedFilters = [
'product._id', 'product._id',
'name', 'name',
'cost', 'cost',
'overrideCost',
'overridePrice',
'costWithTax', 'costWithTax',
'price', 'price',
'priceWithTax', 'priceWithTax',
@ -26,6 +28,8 @@ const listAllowedSorters = [
'name', 'name',
'cost', 'cost',
'costWithTax', 'costWithTax',
'overrideCost',
'overridePrice',
'price', 'price',
'priceWithTax', 'priceWithTax',
'margin', 'margin',
@ -44,53 +48,62 @@ import {
getProductSkuHistoryRouteHandler, getProductSkuHistoryRouteHandler,
searchProductSkusRouteHandler, searchProductSkusRouteHandler,
getProductSkuPropertyValuesRouteHandler, getProductSkuPropertyValuesRouteHandler,
getProductSkuNeighborsRouteHandler,
getProductSkuNeighborsRouteHandler
} from '../../services/management/productskus.js'; } from '../../services/management/productskus.js';
router.get('/', isAuthenticated, checkPermissions('productSku', 'list'), async (req, res) => { router.get('/', isAuthenticated, checkPermissions('productSku', 'list'), async (req, res) => {
const { page, limit, property, search, sortProperty, sortOrder } = req.query; const { page, limit, property, search, sortProperty, sortOrder } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = await getFilter(req.query, listAllowedFilters);
listProductSkusRouteHandler(req, res, page, limit, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder); listProductSkusRouteHandler(
}); req,
res,
router.get('/properties', checkPermissions('productSku', 'list'), isAuthenticated, async (req, res) => { page,
let properties = convertPropertiesString(req.query.properties); limit,
const filter = await getFilter(req.query, propertiesAllowedFilters, false); property,
let masterFilter = {}; filter,
if (req.query.masterFilter) { search,
masterFilter = JSON.parse(req.query.masterFilter); getSort(sortProperty, listAllowedSorters),
} sortOrder
listProductSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter); );
}); });
router.get( router.get(
'/values', '/properties',
checkPermissions('productSku', 'list'), checkPermissions('productSku', 'list'),
isAuthenticated, isAuthenticated,
async (req, res) => { async (req, res) => {
const { property } = req.query; let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, listAllowedFilters, true); const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {}; let masterFilter = {};
if (req.query.masterFilter) { if (req.query.masterFilter) {
masterFilter = await getFilter( masterFilter = JSON.parse(req.query.masterFilter);
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
} }
getProductSkuPropertyValuesRouteHandler(req, res, property, filter, masterFilter); listProductSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
} }
); );
router.get('/values', checkPermissions('productSku', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(JSON.parse(req.query.masterFilter), listAllowedFilters, true);
}
getProductSkuPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
});
router.get('/search', checkPermissions('productSku', 'list'), isAuthenticated, async (req, res) => { router.get('/search', checkPermissions('productSku', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query; const { search } = req.query;
searchProductSkusRouteHandler(req, res, search); searchProductSkusRouteHandler(req, res, search);
}); });
router.post(
router.post('/', isAuthenticated, checkPermissions('product', 'newProductSku'), async (req, res) => { '/',
newProductSkuRouteHandler(req, res); isAuthenticated,
}); checkPermissions('product', 'newProductSku'),
async (req, res) => {
newProductSkuRouteHandler(req, res);
}
);
router.get('/stats', isAuthenticated, async (req, res) => { router.get('/stats', isAuthenticated, async (req, res) => {
getProductSkuStatsRouteHandler(req, res); getProductSkuStatsRouteHandler(req, res);
@ -103,7 +116,16 @@ router.get('/history', isAuthenticated, async (req, res) => {
router.get('/neighbors', isAuthenticated, async (req, res) => { router.get('/neighbors', isAuthenticated, async (req, res) => {
const { property, search, sortProperty, sortOrder, id } = req.query; const { property, search, sortProperty, sortOrder, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters); const filter = await getFilter(req.query, listAllowedFilters);
getProductSkuNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); getProductSkuNeighborsRouteHandler(
req,
res,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder,
id
);
}); });
router.get('/:id', isAuthenticated, async (req, res) => { router.get('/:id', isAuthenticated, async (req, res) => {