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();
}
})
|