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,
});
}
|