API REST para gerenciamento de tickets de suporte técnico, construída com Node.js puro, sem frameworks externos.
Este é um sistema completo de gerenciamento de chamados técnicos (tickets) desenvolvido utilizando apenas módulos nativos do Node.js. O sistema permite criar, listar, atualizar e fechar tickets de suporte, com armazenamento em arquivo JSON.
- ✅ Criar novos tickets de suporte
- 📋 Listar todos os tickets
- 🔍 Filtrar tickets por status (aberto/fechado)
- ✏️ Atualizar informações de um ticket
- ✔️ Fechar tickets com solução registrada
- 🗑️ Remover tickets
- 💾 Persistência de dados em arquivo JSON
- Node.js - Runtime JavaScript
- HTTP nativo (node:http) - Servidor HTTP
- File System (node:fs) - Armazenamento de dados
- Crypto (node:crypto) - Geração de IDs únicos
- ES Modules - Organização modular do código
.
├── server.js # Arquivo principal do servidor
├── database/
│ ├── database.js # Classe de gerenciamento do banco de dados
│ └── db.json # Arquivo de persistência dos dados
├── middlewares/
│ ├── jsonHandler.js # Processamento de JSON
│ └── routeHandler.js # Gerenciamento de rotas
├── controllers/
│ └── tickets/
│ ├── create.js # Criar ticket
│ ├── index.js # Listar tickets
│ ├── update.js # Atualizar ticket
│ ├── updateStatus.js # Fechar ticket
│ └── remove.js # Remover ticket
├── routes/
│ ├── index.js # Exportação de todas as rotas
│ └── tickets.js # Rotas de tickets
└── utils/
├── extractQueryParams.js # Extração de query params
└── parseRoutePath.js # Parser de rotas dinâmicas
Clone o repositório:
git clone https://github.com/eRodrigoVanini/sistema-tickets.git
cd sistema-ticketsNão há dependências externas para instalar! O projeto usa apenas módulos nativos do Node.js.
Inicie o servidor:
node server.jsO servidor estará rodando em http://localhost:3333
POST /tickets
Content-Type: application/json
{
"equipment": "Mouse",
"description": "Mouse não está funcionando",
"user_name": "João Silva"
}Resposta: Status 201 com dados do ticket criado
GET /ticketsListar tickets filtrados por status:
GET /tickets?status=open
GET /tickets?status=closedResposta: Array com todos os tickets
PUT /tickets/:id
Content-Type: application/json
{
"equipment": "Teclado",
"description": "Tecla ESC não funciona"
}PATCH /tickets/:id/close
Content-Type: application/json
{
"solution": "Equipamento substituído"
}DELETE /tickets/:idCada ticket possui a seguinte estrutura:
{
"id": "uuid-gerado-automaticamente",
"equipment": "Nome do equipamento",
"description": "Descrição do problema",
"user_name": "Nome do usuário",
"status": "open" | "closed",
"created_at": "2025-11-18T17:42:21.856Z",
"updated_at": "2025-11-18T17:42:21.856Z",
"solution": "Solução aplicada (apenas quando fechado)"
}- jsonHandler: Processa o corpo das requisições, convertendo de Buffer para JSON
- routeHandler: Identifica a rota correspondente e executa o controller apropriado
Sistema simples de banco de dados que:
- Carrega dados do arquivo
db.jsonna inicialização - Persiste alterações automaticamente
- Suporta operações CRUD (Create, Read, Update, Delete)
- Permite filtros nas consultas
Cada operação possui seu próprio controller, seguindo o princípio de responsabilidade única:
create: Cria novos tickets com ID único e status "open"index: Lista tickets com suporte a filtros por query paramsupdate: Atualiza informações do ticketupdateStatus: Fecha ticket e registra soluçãoremove: Remove ticket do sistema
O sistema utiliza regex para criar rotas dinâmicas, permitindo parâmetros como :id que são extraídos automaticamente e disponibilizados em request.params.
- IDs Únicos: Gerados com
randomUUID()do módulo crypto - Rotas Dinâmicas: Suporte a parâmetros e query strings
- Persistência: Dados salvos em arquivo JSON
- Filtros: Busca case-insensitive por status
- Timestamps: Controle de criação e atualização
Contribuições são bem-vindas! Para contribuir:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/NovaFuncionalidade) - Commit suas mudanças (
git commit -m 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/NovaFuncionalidade) - Abra um Pull Request
- Adicionar validação de dados de entrada
- Implementar autenticação e autorização
- Adicionar paginação na listagem
- Criar sistema de prioridades para tickets
- Implementar notificações
- Adicionar histórico de alterações
Este projeto está sob a licença MIT.
Desenvolvido com 💙 por Rodrigo Vanini
⭐️ Se este projeto foi útil, considere dar uma estrela!