/** * interactions.routes.ts * * Plugin Fastify com as rotas de interação sobre tickets. * Registrado no server.ts com prefixo '/api/v1'. */ import type { FastifyInstance } from 'fastify'; import { ticketIdParamsSchema, updateTicketStatusBodySchema, assignTicketBodySchema, updateTicketPriorityBodySchema, addCommentBodySchema, } from './interactions.schema.js'; import { updateTicketStatusHandler, assignTicketHandler, updateTicketPriorityHandler, addCommentHandler, listCommentsHandler, } from './interactions.controller.js'; async function interactionsRoutes(fastify: FastifyInstance): Promise { // ── PATCH /tickets/:ticketId/status ──────────────────────────────────────── fastify.patch('/tickets/:ticketId/status', { schema: { tags: ['Interações'], summary: 'Atualiza o status de um chamado', params: ticketIdParamsSchema, body: updateTicketStatusBodySchema, }, preHandler: [fastify.authenticate], handler: updateTicketStatusHandler, }); // ── PATCH /tickets/:ticketId/assign ──────────────────────────────────────── fastify.patch('/tickets/:ticketId/assign', { schema: { tags: ['Interações'], summary: 'Atribui ou reatribui um chamado a um agente', params: ticketIdParamsSchema, body: assignTicketBodySchema, }, preHandler: [fastify.authenticate], handler: assignTicketHandler, }); // ── PATCH /tickets/:ticketId/priority ────────────────────────────────────── fastify.patch('/tickets/:ticketId/priority', { schema: { tags: ['Interações'], summary: 'Altera a prioridade de um chamado', params: ticketIdParamsSchema, body: updateTicketPriorityBodySchema, }, preHandler: [fastify.authenticate], handler: updateTicketPriorityHandler, }); // ── POST /tickets/:ticketId/comments ─────────────────────────────────────── fastify.post('/tickets/:ticketId/comments', { schema: { tags: ['Interações'], summary: 'Adiciona um comentário (público ou nota interna) no chamado', params: ticketIdParamsSchema, body: addCommentBodySchema, }, preHandler: [fastify.authenticate], handler: addCommentHandler, }); // ── GET /tickets/:ticketId/comments ──────────────────────────────────────── fastify.get('/tickets/:ticketId/comments', { schema: { tags: ['Interações'], summary: 'Lista todos os comentários de um chamado', params: ticketIdParamsSchema, }, preHandler: [fastify.authenticate], handler: listCommentsHandler, }); } export default interactionsRoutes;