API REST para gerenciamento de chamados jurídicos entre advogados e clientes, com autenticação JWT, controle de acesso por perfil e sistema de interações por chamado.
- Node.js 18+ · TypeScript 5
- Express 5 · Helmet · CORS
- Prisma 6 · PostgreSQL
- JSON Web Token · Bcrypt
- Zod 4 · rate-limiter-flexible
O sistema usa JWT de curta duração (10 min) + Refresh Token (1 dia) armazenado em cookie HttpOnly.
| Método | Rota | Descrição |
|---|---|---|
POST |
/login |
Autentica o usuário e retorna o access token |
POST |
/refreshtoken |
Gera um novo access token via cookie |
DELETE |
/logout |
Invalida o refresh token e limpa o cookie |
Todas as rotas abaixo exigem o header
Authorization: Bearer <token>.
| Role | Permissões |
|---|---|
LAWYER |
Acesso total — gerencia usuários, chamados e interações |
CUSTOMER |
Acesso restrito — visualiza apenas seus próprios chamados e interações |
| Método | Rota | Role | Descrição |
|---|---|---|---|
POST |
/users |
LAWYER | Cria um novo usuário |
GET |
/users |
LAWYER | Lista todos os usuários (?customer=true filtra por clientes) |
GET |
/users/:id |
LAWYER / próprio CUSTOMER | Busca um usuário por ID |
PATCH |
/users/:id |
LAWYER / próprio CUSTOMER | Atualiza dados do usuário |
DELETE |
/users/:id |
LAWYER | Remove um usuário |
| Método | Rota | Role | Descrição |
|---|---|---|---|
POST |
/tickets |
LAWYER | Abre um novo chamado para um cliente |
GET |
/tickets |
LAWYER / CUSTOMER | Lista chamados (CUSTOMER vê apenas os seus) |
GET |
/tickets/:id |
LAWYER / CUSTOMER | Detalha um chamado com suas interações |
PATCH |
/tickets/:id |
LAWYER | Atualiza título, descrição ou status |
DELETE |
/tickets/:id |
LAWYER | Remove um chamado |
Status disponíveis: OPEN · WAITING · FINALIZED
Respostas dentro de um chamado, registradas por advogados.
| Método | Rota | Role | Descrição |
|---|---|---|---|
POST |
/interactions/:id |
LAWYER | Adiciona uma interação ao chamado {id} |
GET |
/interactions/:id |
LAWYER / CUSTOMER | Lista interações do chamado {id} |
PATCH |
/interactions/:id |
LAWYER | Edita uma interação pelo seu ID |
DELETE |
/interactions/:id |
LAWYER | Remove uma interação pelo seu ID |
npm installDATABASE_URL="postgresql://usuario:senha@localhost:5432/legal_tickets"
JWT_SECRET=sua_chave_secretanpx prisma migrate devnpm run devServidor rodando em http://localhost:3333.
Feito por rafaelAmora