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} */ 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) { 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); } }) } };