summary refs log tree commit diff
path: root/src/api/routes/auth/deviceRoutes.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/routes/auth/deviceRoutes.js')
-rw-r--r--src/api/routes/auth/deviceRoutes.js99
1 files changed, 94 insertions, 5 deletions
diff --git a/src/api/routes/auth/deviceRoutes.js b/src/api/routes/auth/deviceRoutes.js

index 551252b..41802b8 100644 --- a/src/api/routes/auth/deviceRoutes.js +++ b/src/api/routes/auth/deviceRoutes.js
@@ -1,7 +1,11 @@ -import { registerUser } from '#db/index.js'; -import { RegisterDto } from '#dto/index.js'; import { requireAuth } from '#api/middlewares/index.js'; import { RouteMethod } from '#api/RouteDescription.js'; +import { SafeNSoundError } from '#util/error.js'; +import Joi from 'joi'; + +const deviceUpdateSchema = Joi.object({ + name: Joi.string().optional().max(100) +}); /** * @type {RouteDescription} @@ -10,12 +14,97 @@ 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) { - const data = await RegisterDto.create(req.body); - const registerResult = await registerUser(data); - res.send(registerResult); + res.send(req.user.devices); + } + }) + } +}; + +/** + * @type {RouteDescription} + */ +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) { + const device = req.user.devices.find( + device => device.id === req.params.id + ); + if (!device) { + res.status(404).send( + new SafeNSoundError({ + errCode: 'ENTITY_NOT_FOUND', + message: 'Device not found' + }) + ); + return; + } + res.send(device); + } + }), + delete: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, + middlewares: [requireAuth], + description: 'Delete user device by ID', + async method(req, res) { + const deviceIndex = req.user.devices.findIndex( + device => device.id === req.params.id + ); + if (deviceIndex === -1) { + res.status(404).send( + new SafeNSoundError({ + errCode: 'ENTITY_NOT_FOUND', + message: 'Device not found' + }) + ); + return; + } + req.user.devices.splice(deviceIndex, 1); + await req.user.save(); + res.status(204).send(); + } + }), + patch: new RouteMethod({ + exampleHeaders: { + Authorization: 'Bearer {{accessToken}}' + }, + exampleBody: { + name: 'New Device Name' + }, + middlewares: [requireAuth], + description: 'Update user device by ID', + async method(req, res) { + const device = req.user.devices.find( + device => device.id === req.params.id + ); + if (!device) { + res.status(404).send( + new SafeNSoundError({ + errCode: 'ENTITY_NOT_FOUND', + message: 'Device not found' + }) + ); + return; + } + if (req.body.name) { + device.name = req.body.name; + } + await req.user.save(); + res.send(device); } }) }