summary refs log tree commit diff
path: root/src/api/routes/assignedUserRoutes.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/routes/assignedUserRoutes.js')
-rw-r--r--src/api/routes/assignedUserRoutes.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/api/routes/assignedUserRoutes.js b/src/api/routes/assignedUserRoutes.js
new file mode 100644

index 0000000..dac9b13 --- /dev/null +++ b/src/api/routes/assignedUserRoutes.js
@@ -0,0 +1,56 @@ +import { getUserById } from '#db/dbAccess/index.js'; +import { requireMonitor } from '#api/middlewares/index.js'; +import { RouteMethod } from '#api/RouteDescription.js'; +import { SafeNSoundError } from '#util/error.js'; + +/** + * @type {RouteDescription} + */ +export const assignedUserRoute = { + path: '/monitor/assignedUsers', + methods: { + get: new RouteMethod({ + middlewares: [requireMonitor], + description: 'Get assigned users', + async method(req, res) { + res.send(req.user.monitoredUsers); + } + }), + patch: { + middlewares: [requireMonitor], + description: 'Add an assigned user by ID', + async method(req, res) { + if (!req.body.userId) { + throw new SafeNSoundError({ + errCode: 'MISSING_FIELD_ERROR', + message: 'User ID is required', + field: 'userId' + }); + } + + if (req.user.monitoredUsers.includes(req.body.userId)) { + throw new SafeNSoundError({ + errCode: 'DUPLICATE_KEY_ERROR', + message: 'User is already assigned' + }); + } + + req.user.monitoredUsers.push(req.body.userId); + await req.user.save(); + res.status(204).send(); + } + }, + delete: { + middlewares: [requireMonitor], + description: 'Remove an assigned user by ID', + async method(req, res) { + // noinspection EqualityComparisonWithCoercionJS + req.user.monitoredUsers = req.user.monitoredUsers.filter( + userId => userId != req.body.userId + ); + await req.user.save(); + res.status(204).send(); + } + } + } +};