summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-06-03 23:53:17 +0200
committerRory& <root@rory.gay>2025-06-03 23:54:08 +0200
commitdf4af1b6b14b9287da332b36ca23bc4ccddfe58f (patch)
treeed42be6573eceb857edf6bb193ff4a069ad60a76 /src
parentImplement budget handling (diff)
downloadnodejs-final-assignment-main.tar.xz
API docs HEAD main
Diffstat (limited to 'src')
-rw-r--r--src/api/routes.js1
-rw-r--r--src/api/routes/adminRoutes.js6
-rw-r--r--src/api/routes/alarmRoutes.js23
-rw-r--r--src/api/routes/assignedUserRoutes.js12
-rw-r--r--src/api/routes/auth/accountRoutes.js3
-rw-r--r--src/api/routes/auth/deviceRoutes.js15
-rw-r--r--src/api/routes/budgetRoutes.js26
7 files changed, 83 insertions, 3 deletions
diff --git a/src/api/routes.js b/src/api/routes.js

index 279b1ef..e2765a3 100644 --- a/src/api/routes.js +++ b/src/api/routes.js
@@ -15,6 +15,7 @@ function logHttpHeader() { logPrefixed('@password=admin'); logPrefixed('@email=admin@example.com'); logPrefixed('@userType=admin'); + logPrefixed('@accessToken=someValueXyzXyz'); logPrefixed(''); logPrefixed(''); } diff --git a/src/api/routes/adminRoutes.js b/src/api/routes/adminRoutes.js
index a5902ee..4baa5e4 100644 --- a/src/api/routes/adminRoutes.js +++ b/src/api/routes/adminRoutes.js
@@ -16,6 +16,9 @@ export const adminGetUserIdsRoute = { path: '/admin/allUserIds', methods: { get: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireAdmin], description: 'Get all user IDs', async method(req, res) { @@ -42,6 +45,9 @@ export const adminMonitorAllRoute = { path: '/admin/monitorAllUsers', methods: { post: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireAdmin], description: 'Monitor all users', async method(req, res) { diff --git a/src/api/routes/alarmRoutes.js b/src/api/routes/alarmRoutes.js
index 635d230..b0147ab 100644 --- a/src/api/routes/alarmRoutes.js +++ b/src/api/routes/alarmRoutes.js
@@ -15,6 +15,9 @@ export const alarmByUserRoute = { path: '/user/:id/alarm', methods: { get: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireMonitor], description: 'Get the alarm for a monitored user, if one is set', async method(req, res) { @@ -23,6 +26,9 @@ export const alarmByUserRoute = { } }), delete: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireMonitor], description: 'Clear the alarm for a monitored user', async method(req, res) { @@ -44,6 +50,9 @@ export const alarmListRoute = { path: '/alarms', methods: { get: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireMonitor], description: 'Get a list of all alarms for monitored users', async method(req, res) { @@ -77,6 +86,9 @@ export const alarmRoute = { path: '/alarm/@me', methods: { get: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireUser], description: "Get the current user's alarm", async method(req, res) { @@ -84,8 +96,14 @@ export const alarmRoute = { } }), put: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, + exampleBody: { + reason: 'fall' + }, middlewares: [requireUser], - description: 'Raise an alarm', + description: 'Raise an alarm (enum: one of "fall" or "toilet")', async method(req, res) { req.user.alarm = await AlarmDto.create(req.body); await req.user.save(); @@ -93,6 +111,9 @@ export const alarmRoute = { } }), delete: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireUser], description: 'Clear alarm', async method(req, res) { diff --git a/src/api/routes/assignedUserRoutes.js b/src/api/routes/assignedUserRoutes.js
index dac9b13..e870cd8 100644 --- a/src/api/routes/assignedUserRoutes.js +++ b/src/api/routes/assignedUserRoutes.js
@@ -10,6 +10,9 @@ export const assignedUserRoute = { path: '/monitor/assignedUsers', methods: { get: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireMonitor], description: 'Get assigned users', async method(req, res) { @@ -17,7 +20,13 @@ export const assignedUserRoute = { } }), patch: { + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireMonitor], + exampleBody: { + userId: 'abcdef' + }, description: 'Add an assigned user by ID', async method(req, res) { if (!req.body.userId) { @@ -41,6 +50,9 @@ export const assignedUserRoute = { } }, delete: { + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireMonitor], description: 'Remove an assigned user by ID', async method(req, res) { diff --git a/src/api/routes/auth/accountRoutes.js b/src/api/routes/auth/accountRoutes.js
index fb6dcfa..f0d0102 100644 --- a/src/api/routes/auth/accountRoutes.js +++ b/src/api/routes/auth/accountRoutes.js
@@ -107,6 +107,9 @@ export const whoAmI = { methods: { get: new RouteMethod({ description: 'Get current user', + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireAuth], async method(req, res) { const data = await WhoAmIDto.create({ diff --git a/src/api/routes/auth/deviceRoutes.js b/src/api/routes/auth/deviceRoutes.js
index 023d02d..41802b8 100644 --- a/src/api/routes/auth/deviceRoutes.js +++ b/src/api/routes/auth/deviceRoutes.js
@@ -14,6 +14,9 @@ export const getDevicesRoute = { path: '/auth/devices', methods: { get: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireAuth], description: 'Get all devices registered to the user', async method(req, res) { @@ -30,6 +33,9 @@ export const manageDeviceRoute = { path: '/auth/devices/:id', methods: { get: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireAuth], description: 'Get user device by ID', async method(req, res) { @@ -49,6 +55,9 @@ export const manageDeviceRoute = { } }), delete: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireAuth], description: 'Delete user device by ID', async method(req, res) { @@ -70,6 +79,12 @@ export const manageDeviceRoute = { } }), patch: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, + exampleBody: { + name: 'New Device Name' + }, middlewares: [requireAuth], description: 'Update user device by ID', async method(req, res) { diff --git a/src/api/routes/budgetRoutes.js b/src/api/routes/budgetRoutes.js
index 13b4c50..e522442 100644 --- a/src/api/routes/budgetRoutes.js +++ b/src/api/routes/budgetRoutes.js
@@ -16,8 +16,8 @@ import Joi from 'joi'; const budgetModifySchema = new Joi.object({ venue: Joi.string().required().max(100), reason: Joi.string().required().max(500), - amount: Joi.number().required().min(0) - // createdAt: Joi.forbidden() + amount: Joi.number().required().min(0), + createdAt: Joi.forbidden() }); /** @@ -27,6 +27,9 @@ export const getBudgetByUserRoute = { path: '/user/:id/budget', methods: { get: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireMonitor], description: 'Get the budget for a monitored user', async method(req, res) { @@ -43,6 +46,14 @@ export const getBudgetByUserRoute = { } }), patch: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, + exampleBody: { + venue: 'Monitor 123', + reason: 'Just short for a coke to deal with diabetes', + amount: 0.15 + }, middlewares: [requireMonitor], description: 'Add budget for a monitored user', async method(req, res) { @@ -80,12 +91,23 @@ export const userBudgetRoute = { path: '/budget/@me', methods: { get: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, middlewares: [requireUser], async method(req, res) { res.send({ currentBalance: req.user.balance }); } }), patch: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, + exampleBody: { + venue: 'The Store', + reason: 'Bought a coke', + amount: 0.85 + }, middlewares: [requireUser], description: 'Spend part of budget', async method(req, res) {