aboutsummaryrefslogtreecommitdiff
path: root/api/src/modules/tickets/tickets.routes.ts
diff options
context:
space:
mode:
authorzwlucas <lucas.fariamo08@gmail.com>2026-07-25 21:23:29 +0000
committerzwlucas <lucas.fariamo08@gmail.com>2026-07-25 21:23:29 +0000
commitef55d9bb24430610b60c1b77821307cd72c08c55 (patch)
treee6935a810b34370b0a4c821e55f6397aac50c832 /api/src/modules/tickets/tickets.routes.ts
downloadhelpdesk-ef55d9bb24430610b60c1b77821307cd72c08c55.tar.gz
helpdesk-ef55d9bb24430610b60c1b77821307cd72c08c55.zip
feat: upload of the projectHEADmaster
Signed-off-by: zwlucas <lucas.fariamo08@gmail.com>
Diffstat (limited to 'api/src/modules/tickets/tickets.routes.ts')
-rw-r--r--api/src/modules/tickets/tickets.routes.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/api/src/modules/tickets/tickets.routes.ts b/api/src/modules/tickets/tickets.routes.ts
new file mode 100644
index 0000000..69c04a4
--- /dev/null
+++ b/api/src/modules/tickets/tickets.routes.ts
@@ -0,0 +1,75 @@
+/**
+ * tickets.routes.ts
+ *
+ * Plugin Fastify com todas as rotas do módulo de tickets.
+ * Registrado no server.ts com prefixo '/api/v1/tickets'.
+ *
+ * Rotas disponíveis:
+ * POST /api/v1/tickets → abre novo chamado
+ * GET /api/v1/tickets → lista chamados (com filtros e paginação)
+ * GET /api/v1/tickets/:id → busca chamado por ID
+ */
+
+import type { FastifyInstance } from 'fastify';
+import {
+ createTicketBodySchema,
+ listTicketsQuerySchema,
+ ticketParamsSchema,
+} from './tickets.schema.js';
+import {
+ createTicketHandler,
+ listTicketsHandler,
+ getTicketByIdHandler,
+ deleteTicketHandler,
+} from './tickets.controller.js';
+
+async function ticketsRoutes(fastify: FastifyInstance): Promise<void> {
+
+ // ── POST /api/v1/tickets ──────────────────────────────────────────────────
+ fastify.post('/', {
+ schema: {
+ tags: ['Tickets'],
+ summary: 'Cria um novo chamado',
+ description: 'Cria um novo chamado, definindo o criador como o usuário logado.',
+ body: createTicketBodySchema,
+ },
+ preHandler: [fastify.authenticate],
+ handler: createTicketHandler,
+ });
+
+ // ── GET /api/v1/tickets ───────────────────────────────────────────────────
+ fastify.get('/', {
+ schema: {
+ tags: ['Tickets'],
+ summary: 'Lista os chamados',
+ description: 'Retorna a lista de chamados, suportando filtros e paginação.',
+ querystring: listTicketsQuerySchema,
+ },
+ preHandler: [fastify.authenticate],
+ handler: listTicketsHandler,
+ });
+
+ // ── GET /api/v1/tickets/:id ───────────────────────────────────────────────
+ fastify.get('/:id', {
+ schema: {
+ tags: ['Tickets'],
+ summary: 'Busca um chamado pelo ID',
+ params: ticketParamsSchema,
+ },
+ preHandler: [fastify.authenticate],
+ handler: getTicketByIdHandler,
+ });
+
+ // ── DELETE /tickets/:id ────────────────────────────────────────────────────
+ fastify.delete('/:id', {
+ schema: {
+ tags: ['Tickets'],
+ summary: 'Exclui um chamado pelo ID',
+ params: ticketParamsSchema,
+ },
+ preHandler: [fastify.authenticate],
+ handler: deleteTicketHandler,
+ });
+}
+
+export default ticketsRoutes;