diff --git a/src/database/database.js b/src/database/database.js index 89221f6..7b81b71 100644 --- a/src/database/database.js +++ b/src/database/database.js @@ -933,9 +933,28 @@ export const newObject = async ({ model, newData, user = null }, distributeChang }; // Reusable function to delete an object by ID, with audit logging and distribution -export const deleteObject = async ({ model, id, user = null }, distributeChanges = true) => { +export const deleteObject = async ( + { model, id, user = null, checkUnused = false }, + distributeChanges = true +) => { try { const parentType = model.modelName ? model.modelName : 'unknown'; + + if (checkUnused) { + const dependencies = await listObjectDependencies({ model, id }); + if (dependencies?.error) { + return { error: dependencies.error, code: dependencies.code || 500 }; + } + if (dependencies?.length > 0) { + return { + error: 'Object is in use and cannot be deleted', + code: 409, + dependencies: dependencies.length, + dependencyDetails: dependencies, + }; + } + } + // Delete the object const result = await model.findByIdAndDelete(id); diff --git a/src/routes/management/filaments.js b/src/routes/management/filaments.js index bbe83cf..6a7fe8f 100644 --- a/src/routes/management/filaments.js +++ b/src/routes/management/filaments.js @@ -10,6 +10,7 @@ import { editFilamentRouteHandler, editMultipleFilamentsRouteHandler, newFilamentRouteHandler, + deleteFilamentRouteHandler, getFilamentStatsRouteHandler, getFilamentHistoryRouteHandler, } from '../../services/management/filaments.js'; @@ -70,9 +71,13 @@ router.put('/', isAuthenticated, async (req, res) => { editMultipleFilamentsRouteHandler(req, res); }); -// update printer info +// update filament info router.put('/:id', isAuthenticated, async (req, res) => { editFilamentRouteHandler(req, res); }); +router.delete('/:id', isAuthenticated, async (req, res) => { + deleteFilamentRouteHandler(req, res); +}); + export default router; diff --git a/src/services/management/filaments.js b/src/services/management/filaments.js index c15009f..3f7229e 100644 --- a/src/services/management/filaments.js +++ b/src/services/management/filaments.js @@ -9,6 +9,7 @@ import { editObject, editObjects, newObject, + deleteObject, getModelStats, getModelHistory, } from '../../database/database.js'; @@ -194,6 +195,26 @@ export const newFilamentRouteHandler = async (req, res) => { res.send(result); }; +export const deleteFilamentRouteHandler = async (req, res) => { + const id = new mongoose.Types.ObjectId(req.params.id); + + logger.trace(`Filament with ID: ${id}`); + + const result = await deleteObject({ + model: filamentModel, + id, + user: req.user, + checkUnused: true, + }); + if (result.error) { + logger.error('No filament deleted:', result.error); + return res.status(result.code).send(result); + } + + logger.debug(`Deleted filament with ID: ${id}`); + res.send(result); +}; + export const getFilamentStatsRouteHandler = async (req, res) => { const result = await getModelStats({ model: filamentModel }); if (result?.error) {