summary refs log tree commit diff
path: root/src/api/routes/alarmRoutes.js
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-06-03 01:01:40 +0200
committerRory& <root@rory.gay>2025-06-03 01:01:40 +0200
commit6f3f08ed340e59a62a2d0428a5c32f99551ef1ce (patch)
treeff77390b1d3ea61414c14c94ac1fa2a05030879b /src/api/routes/alarmRoutes.js
parentMore alarm testing (diff)
downloadnodejs-final-assignment-6f3f08ed340e59a62a2d0428a5c32f99551ef1ce.tar.xz
Fix performance issues, add fake user bot to test client, more testing
Diffstat (limited to 'src/api/routes/alarmRoutes.js')
-rw-r--r--src/api/routes/alarmRoutes.js38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/api/routes/alarmRoutes.js b/src/api/routes/alarmRoutes.js

index 23b79c1..ae5a88a 100644 --- a/src/api/routes/alarmRoutes.js +++ b/src/api/routes/alarmRoutes.js
@@ -3,7 +3,7 @@ import { requireUser, requireRole } from '#api/middlewares/index.js'; -import { UserType } from '#db/schemas/index.js'; +import { DbUser, UserType } from '#db/schemas/index.js'; import { RouteMethod } from '#api/RouteDescription.js'; import { getUserById } from '#db/dbAccess/index.js'; import { AlarmDto } from '#dto/AlarmDto.js'; @@ -12,7 +12,7 @@ import { AlarmDto } from '#dto/AlarmDto.js'; * @type {RouteDescription} */ export const alarmByUserRoute = { - path: '/alarm/:id', + path: '/user/:id/alarm', methods: { get: new RouteMethod({ middlewares: [requireMonitor], @@ -27,8 +27,10 @@ export const alarmByUserRoute = { description: 'Clear the alarm for a monitored user', async method(req, res) { const user = await getUserById(req.params.id); - user.alarm = null; - await user.save(); + if (user.alarm) { + user.alarm = null; + await user.save(); + } res.status(204).send(); } }) @@ -45,15 +47,24 @@ export const alarmListRoute = { middlewares: [requireMonitor], description: 'Get a list of all alarms for monitored users', async method(req, res) { - console.log(req.user.monitoredUsers); - const alarms = {}; - for (const userId of req.user.monitoredUsers) { - const user = await getUserById(userId); + // execute the query asynchronously and manually construct a response, for scaling reasons + const users = DbUser.find({ + _id: { $in: req.user.monitoredUsers } + }) + .lean() + .cursor(); + res.status(200); + res.write('{\n'); + for await (const user of users) { if (user.alarm) { - alarms[userId] = user.alarm; + // alarms[user._id] = user.alarm; + res.write( + `"${user._id}": ${JSON.stringify(user.alarm)},\n` + ); } } - res.send(alarms); + res.write('}'); + res.end(); } }) } @@ -76,7 +87,6 @@ export const alarmRoute = { middlewares: [requireUser], description: 'Raise an alarm', async method(req, res) { - console.log(req.body); req.user.alarm = await AlarmDto.create(req.body); await req.user.save(); res.status(204).send(); @@ -86,8 +96,10 @@ export const alarmRoute = { middlewares: [requireUser], description: 'Clear alarm', async method(req, res) { - req.user.alarm = null; - await req.user.save(); + if (req.user.alarm) { + req.user.alarm = null; + await req.user.save(); + } res.status(204).send(); } })