diff options
Diffstat (limited to 'api/src/modules/users/users.routes.ts')
| -rw-r--r-- | api/src/modules/users/users.routes.ts | 73 |
1 files changed, 73 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..28cf584 --- /dev/null +++ b/api/src/modules/users/users.routes.ts @@ -0,0 +1,73 @@ +import type { FastifyPluginAsync } from 'fastify'; +import { ZodError } from 'zod'; +import { + createUserSchema, + updateUserSchema, + userParamsSchema, +} from './users.schema'; +import * as usersService from './users.service'; + +const usersRoutes: FastifyPluginAsync = async (fastify) => { + /** GET /users — Lista todos os usuários */ + fastify.get('/users', async (_request, reply) => { + const result = await usersService.findAllUsers(); + return reply.send({ data: result }); + }); + + /** GET /users/:id — Busca um usuário pelo ID */ + fastify.get<{ Params: { id: string } }>('/users/:id', async (request, reply) => { + const { id } = userParamsSchema.parse(request.params); + const user = await usersService.findUserById(id); + + if (!user) { + return reply.status(404).send({ error: 'Usuário não encontrado.' }); + } + return reply.send({ data: user }); + }); + + /** POST /users — Cria um novo usuário */ + fastify.post('/users', async (request, reply) => { + try { + const body = createUserSchema.parse(request.body); + const user = await usersService.createUser(body); + return reply.status(201).send({ data: user }); + } catch (err) { + if (err instanceof ZodError) { + return reply.status(400).send({ error: 'Dados inválidos.', details: err.errors }); + } + throw err; + } + }); + + /** PUT /users/:id — Atualiza um usuário (incluindo salário e override) */ + fastify.put<{ Params: { id: string } }>('/users/:id', async (request, reply) => { + try { + const { id } = userParamsSchema.parse(request.params); + const body = updateUserSchema.parse(request.body); + const user = await usersService.updateUser(id, body); + + if (!user) { + return reply.status(404).send({ error: 'Usuário não encontrado.' }); + } + return reply.send({ data: user }); + } catch (err) { + if (err instanceof ZodError) { + return reply.status(400).send({ error: 'Dados inválidos.', details: err.errors }); + } + throw err; + } + }); + + /** DELETE /users/:id — Remove um usuário (cascade nos gastos) */ + fastify.delete<{ Params: { id: string } }>('/users/:id', async (request, reply) => { + const { id } = userParamsSchema.parse(request.params); + const deleted = await usersService.deleteUser(id); + + if (!deleted) { + return reply.status(404).send({ error: 'Usuário não encontrado.' }); + } + return reply.status(200).send({ data: deleted, message: 'Usuário removido com sucesso.' }); + }); +}; + +export default usersRoutes; |