Backend API para gerenciamento de veículos desenvolvido com NestJS, Prisma ORM e RabbitMQ.
Este projeto implementa uma API REST completa para gerenciamento de veículos, incluindo operações CRUD, validação de dados, paginação, documentação OpenAPI/Swagger e processamento assíncrono via mensageria RabbitMQ.
- CRUD Completo: Criar, listar, buscar, atualizar e deletar veículos
- Validação de Dados: Validações robustas usando class-validator
- Paginação: Suporte a paginação com headers informativos
- Documentação Interativa: Swagger/OpenAPI com exemplos
- Mensageria: Publicação de eventos via RabbitMQ
- Worker Assíncrono: Processamento de mensagens em background
- Banco de Dados: PostgreSQL com migrações Prisma
- Containerização: Docker e Docker Compose para desenvolvimento e produção
- Testes: Testes unitários com Jest
- TypeScript: Tipagem forte e configurações flexíveis
- Framework: NestJS v11
- ORM: Prisma v6
- Banco: PostgreSQL 15
- Mensageria: RabbitMQ 3
- Linguagem: TypeScript/Node.js v22
- Validação: class-validator
- Documentação: @nestjs/swagger
- Testes: Jest
- Container: Docker & Docker Compose
- Node.js v22+
- Docker & Docker Compose
- npm ou yarn
git clone <repository-url>
cd info-backendnpm ciCopie o arquivo de exemplo de variáveis de ambiente:
cp .env.example .envConfigure as variáveis no arquivo .env conforme necessário.
# Gere o cliente Prisma
npm run prisma:generate
# Execute as migrações
npm run prisma:migrate
# (Opcional) Popule o banco com dados de exemplo (20 veículos)
npm run seed# Inicia todos os serviços (API, Worker, Postgres, RabbitMQ)
npm run compose:up
# Ou em background
npm run compose:up:detached
# Para parar
npm run compose:down# Inicie apenas as dependências
docker compose up postgres rabbitmq -d
# Execute a API localmente
npm run start:dev
# Ou build e start
npm start# Build da aplicação
npm run build
# Execute com Docker Compose
docker compose -f docker-compose.prod.yml up --buildGET /api/vehicles- Lista veículos com paginaçãoPOST /api/vehicles- Cria novo veículoGET /api/vehicles/:id- Busca veículo por IDPUT /api/vehicles/:id- Atualiza veículoDELETE /api/vehicles/:id- Remove veículo
Acesse a documentação Swagger em: http://localhost:3000/api/docs
X-Total-Count: Total de registrosX-Page: Página atualX-Limit: Limite por páginaLink: Links para navegação (prev/next/first/last)
# Criar veículo
curl -X POST http://localhost:3000/api/vehicles \
-H "Content-Type: application/json" \
-d '{
"placa": "ABC1234",
"chassi": "9BWZZZ377VT004251",
"renavam": "123456789",
"modelo": "Gol",
"marca": "Volkswagen",
"ano": 2020
}'# Executar todos os testes unitários
npm test
# Testes em modo watch
npm run test:watch
# Cobertura de testes
npm run test:covCobertura: 44 testes unitários cobrindo controller, service e DTOs.
📄 Veja TESTS.md para detalhes completos.
# Executar testes e2e
npm run test:e2e
# Testes e2e em modo watch
npm run test:e2e:watch
# Usar script auxiliar (verifica serviços)
./test/run-e2e.shPré-requisitos para E2E:
- PostgreSQL rodando:
docker compose up -d postgres - RabbitMQ rodando:
docker compose up -d rabbitmq - API rodando:
npm start
Cobertura: 25 testes e2e validando integração com banco e RabbitMQ.
📄 Veja test/README-E2E.md para detalhes completos.
| Tipo | Quantidade | Cobertura |
|---|---|---|
| Unitários | 44 | Controller, Service, DTOs |
| E2E | 25 | PostgreSQL, RabbitMQ, API |
| Total | 69 | Sistema completo |
model Vehicle {
id String @id @default(cuid())
placa String @unique
chassi String @unique
renavam String @unique
modelo String
marca String
ano Int
createdAt DateTime @default(now())
updatedAt DateTime @updateAt
@@index([modelo, marca])
@@index([ano])
}# Gerar cliente
npm run prisma:generate
# Criar migração
npm run prisma:migrate
# Reset do banco (desenvolvimento)
npm run prisma:reset
# Studio (interface gráfica)
npm run prisma:studio- Management UI: http://localhost:15672
- Credenciais: guest/guest
- Fila:
vehicle_created
O worker consome mensagens da fila vehicle_created e processa eventos de criação de veículos em background.
src/
├── main.ts # Ponto de entrada da aplicação
├── app.module.ts # Módulo principal
├── prisma/
│ ├── prisma.service.ts # Serviço Prisma
│ └── prisma.module.ts # Módulo Prisma
├── vehicles/
│ ├── vehicles.controller.ts # Controller REST
│ ├── vehicles.service.ts # Lógica de negócio
│ ├── vehicles.module.ts # Módulo de veículos
│ ├── dto/ # Data Transfer Objects
│ └── vehicles.spec.ts # Testes
├── worker/
│ └── worker.ts # Worker RabbitMQ
└── config/ # Configurações
# Desenvolvimento
npm run start:dev # Hot reload
npm start # Build + start
npm run build # Compilar TypeScript
# Docker
npm run compose:up # Iniciar containers
npm run compose:up:detached # Containers em background
npm run compose:down # Parar containers
# Banco de dados
npm run prisma:generate # Gerar cliente Prisma
npm run prisma:migrate # Executar migrações
npm run seed # Popular banco
# Testes
npm test # Executar testes
npm run test:watch # Testes em watch mode| Variável | Descrição | Padrão |
|---|---|---|
DATABASE_URL |
URL de conexão PostgreSQL | - |
RABBITMQ_URL |
URL de conexão RabbitMQ | - |
NODE_ENV |
Ambiente (development/production) | development |
- API:
node:22-alpinemulti-stage build - Worker:
node:22-alpinemulti-stage build - Database:
postgres:15-alpine - Message Broker:
rabbitmq:3-management
postgres_data: Dados persistentes do PostgreSQLnode_modules: Cache de dependências Node.js
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Para dúvidas ou problemas, abra uma issue no repositório.