Tom Butcher c679066504
All checks were successful
farmcontrol/farmcontrol-api/pipeline/head This commit looks good
Add bulk delete functionality for various entities with filter support
This commit introduces a new `deleteObjects` function in the database module, allowing for bulk deletion of objects based on specified filters and states. Additionally, new route handlers for deleting invoices, payment policies, payments, tax records, filament stocks, order items, part stocks, product stocks, purchase orders, shipments, stock audits, stock locations, stock transfers, app passwords, couriers, courier services, document printers, document sizes, document templates, email accounts, email templates, filaments, filament SKUs, files, hosts, materials, note types, parts, part SKUs, permission settings, product categories, products, and vendor entities are added. Each route supports deletion based on filters, enhancing the application's data management capabilities.
2026-09-13 17:12:59 +01:00

153 lines
4.1 KiB
JavaScript

import express from 'express';
import { isAuthenticated } from '../../keycloak.js';
import { checkPermissions } from '../../database/permissions.js';
const router = express.Router();
const listAllowedFilters = [
'state',
'gcodeFile',
'gcodeFile._id',
'quantity',
'_id',
'_reference',
'createdAt',
'updatedAt',
'startedAt',
'finishedAt',
];
const listAllowedSorters = [
'createdAt',
'state',
'quantity',
'gcodeFile',
'updatedAt',
'startedAt',
'finishedAt',
];
const propertiesAllowedFilters = ['state'];
import {
listJobsRouteHandler,
listJobsByPropertiesRouteHandler,
getJobRouteHandler,
newJobRouteHandler,
deleteJobRouteHandler,
deleteJobByFilterRouteHandler,
editJobRouteHandler,
getJobStatsRouteHandler,
getJobHistoryRouteHandler,
searchJobsRouteHandler,
getJobPropertyValuesRouteHandler,
getJobNeighborsRouteHandler,
} from '../../services/production/jobs.js';
import { convertPropertiesString, getFilter, getSort } from '../../utils.js';
import { jobModel } from '../../database/schemas/production/job.schema.js';
// list of jobs
router.get('/', isAuthenticated, checkPermissions('job', 'list'), async (req, res) => {
const { page, limit, property, search, sortProperty, sortOrder } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true, jobModel);
listJobsRouteHandler(
req,
res,
page,
limit,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder
);
});
router.get('/properties', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = JSON.parse(req.query.masterFilter);
}
listJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get('/values', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true, jobModel);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true,
jobModel
);
}
getJobPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
});
router.get('/search', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchJobsRouteHandler(req, res, search);
});
router.post('/', isAuthenticated, checkPermissions('job', 'new'), async (req, res) => {
newJobRouteHandler(req, res);
});
// get job stats
router.get('/stats', isAuthenticated, async (req, res) => {
getJobStatsRouteHandler(req, res);
});
// get job history
router.get('/history', isAuthenticated, async (req, res) => {
getJobHistoryRouteHandler(req, res);
});
router.get('/neighbors', isAuthenticated, async (req, res) => {
const { property, search, sortProperty, sortOrder, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters);
getJobNeighborsRouteHandler(
req,
res,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder,
id
);
});
router.get('/:id', isAuthenticated, checkPermissions('job', 'info'), async (req, res) => {
getJobRouteHandler(req, res);
});
router.put('/:id', isAuthenticated, checkPermissions('job', 'edit'), async (req, res) => {
editJobRouteHandler(req, res);
});
router.delete(
'/delete',
isAuthenticated,
checkPermissions('job', 'delete'),
async (req, res) => {
const filter = await getFilter(
req.query.filter ? JSON.parse(req.query.filter) : {},
listAllowedFilters,
true
);
const masterFilter = await getFilter(
req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {},
listAllowedFilters,
true
);
deleteJobByFilterRouteHandler(req, res, filter, masterFilter);
}
);
router.delete('/:id', isAuthenticated, async (req, res) => {
deleteJobRouteHandler(req, res);
});
export default router;