Skip to content

eRodrigoVanini/support-tickets

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

🎫 Sistema de Suporte - API de Tickets

API REST para gerenciamento de tickets de suporte técnico, construída com Node.js puro, sem frameworks externos.

📋 Sobre o Projeto

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.

✨ Funcionalidades

  • ✅ 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

🚀 Tecnologias

  • 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

📁 Estrutura do Projeto

.
├── 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

🔧 Instalação

Clone o repositório:

git clone https://github.com/eRodrigoVanini/sistema-tickets.git
cd sistema-tickets

Não há dependências externas para instalar! O projeto usa apenas módulos nativos do Node.js.

💻 Como Usar

Inicie o servidor:

node server.js

O servidor estará rodando em http://localhost:3333

📡 Endpoints da API

Criar Ticket

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

Listar Tickets

GET /tickets

Listar tickets filtrados por status:

GET /tickets?status=open
GET /tickets?status=closed

Resposta: Array com todos os tickets

Atualizar Ticket

PUT /tickets/:id
Content-Type: application/json

{
  "equipment": "Teclado",
  "description": "Tecla ESC não funciona"
}

Fechar Ticket

PATCH /tickets/:id/close
Content-Type: application/json

{
  "solution": "Equipamento substituído"
}

Remover Ticket

DELETE /tickets/:id

🗄️ Estrutura do Ticket

Cada 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)"
}

🏗️ Arquitetura

Middlewares

  • jsonHandler: Processa o corpo das requisições, convertendo de Buffer para JSON
  • routeHandler: Identifica a rota correspondente e executa o controller apropriado

Database

Sistema simples de banco de dados que:

  • Carrega dados do arquivo db.json na inicialização
  • Persiste alterações automaticamente
  • Suporta operações CRUD (Create, Read, Update, Delete)
  • Permite filtros nas consultas

Controllers

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 params
  • update: Atualiza informações do ticket
  • updateStatus: Fecha ticket e registra solução
  • remove: Remove ticket do sistema

Rotas Dinâmicas

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.

🔍 Recursos Técnicos

  • 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

🤝 Como Contribuir

Contribuições são bem-vindas! Para contribuir:

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/NovaFuncionalidade)
  3. Commit suas mudanças (git commit -m 'Adiciona nova funcionalidade')
  4. Push para a branch (git push origin feature/NovaFuncionalidade)
  5. Abra um Pull Request

📝 Melhorias Futuras

  • 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

📄 Licença

Este projeto está sob a licença MIT.

✒️ Autor

Desenvolvido com 💙 por Rodrigo Vanini


⭐️ Se este projeto foi útil, considere dar uma estrela!

About

An API for adding, reading, updating, and deleting support tickets using Node.js.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors