aboutsummaryrefslogtreecommitdiff
path: root/api/src/modules/users/users.routes.ts
blob: c7f1846dbf65c4ea264fa3e0afe7b65531c32e81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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,
  });
}