diff options
Diffstat (limited to 'api/src/modules/users/users.routes.ts')
| -rw-r--r-- | api/src/modules/users/users.routes.ts | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/api/src/modules/users/users.routes.ts b/api/src/modules/users/users.routes.ts new file mode 100644 index 0000000..c7f1846 --- /dev/null +++ b/api/src/modules/users/users.routes.ts @@ -0,0 +1,56 @@ +import type { FastifyInstance } from 'fastify'; +import { createUserByAdminBodySchema, updateUserBodySchema, userIdParamsSchema } from './users.schema.js'; +import { listUsersHandler, createUserHandler, updateUserHandler, deleteUserHandler } from './users.controller.js'; + +export default async function usersRoutes(fastify: FastifyInstance) { + // Middleware customizado para garantir que apenas admins possam acessar + const requireAdmin = async (request: any, reply: any) => { + if (request.user?.role !== 'admin') { + return reply.forbidden('Apenas administradores podem gerenciar usuários.'); + } + }; + + // ── GET /users ───────────────────────────────────────────────────────────── + fastify.get('/', { + schema: { + tags: ['Users'], + summary: 'Lista todos os usuários (admin)', + }, + preHandler: [fastify.authenticate, requireAdmin], + handler: listUsersHandler, + }); + + // ── POST /users ──────────────────────────────────────────────────────────── + fastify.post('/', { + schema: { + tags: ['Users'], + summary: 'Cria um novo usuário (admin)', + body: createUserByAdminBodySchema, + }, + preHandler: [fastify.authenticate, requireAdmin], + handler: createUserHandler, + }); + + // ── PATCH /users/:id ─────────────────────────────────────────────────────── + fastify.patch('/:id', { + schema: { + tags: ['Users'], + summary: 'Atualiza um usuário (admin)', + params: userIdParamsSchema, + body: updateUserBodySchema, + }, + preHandler: [fastify.authenticate, requireAdmin], + handler: updateUserHandler, + }); + + // ── DELETE /users/:id ────────────────────────────────────────────────────── + fastify.delete('/:id', { + schema: { + tags: ['Users'], + summary: 'Exclui um usuário (admin)', + params: userIdParamsSchema, + }, + preHandler: [fastify.authenticate, requireAdmin], + handler: deleteUserHandler, + }); +} |