API REST CRUD de Veículos com NestJS
Uma API REST CRUD desenvolvida com o framework NestJS, projetada para gerenciar dados de veículos de forma eficiente. O projeto utiliza TypeScript, Mocha, Chai, Swagger e Docker para testes, documentação e implantação.
Estrutura do Projeto
src
├── vehicle
│ ├── __tests__ # Testes unitários e de ponta a ponta
│ ├── dto # Data Transfer Objects
│ ├── entities # Definição da entidade Veículo
│ ├── repositories # Interfaces e implementações do repositório
│ ├── vehicle.controller.ts # Endpoints da API
│ ├── vehicle.module.ts # Módulo Veículo
│ └── vehicle.mapper.ts # Utilitário para mapear entidades para DTOs
├── app.module.ts # Módulo raiz
├── app.error.ts # Tratamento de erros
└── main.ts # Ponto de entrada
Funcionalidades
- Operações CRUD: Gerenciamento completo de veículos com funcionalidades de Criar, Ler, Atualizar e Deletar.
- Paginação: Suporte para paginação em listagens, com parâmetros de página e tamanho configuráveis.
- Validação de Campos Únicos: Verificação e tratamento de duplicação para campos como
chassis,placaerenavam. - Documentação com Swagger: Documentação interativa da API disponível em
/api. - Banco de Dados em Memória: Configuração simplificada com repositório em memória.
- Validação e Tratamento de Erros: Validação de entrada com
class-validatore tratamento de erros consistente. - Testes Automatizados: Testes unitários e de ponta a ponta com Mocha e Chai.
- Cobertura de Testes: Relatórios de cobertura detalhados com
nyc. - Ambiente Dockerizado: Configuração e execução simplificadas com Docker.
Instalação
Clone o repositório e instale as dependências:
$ git clone https://github.com/JustAzul/nestjs-vehicle-crud-rest.git
$ cd nestjs-vehicle-crud-rest
$ npm ciExecutando a Aplicação
Usando Docker Compose
-
Inicie a aplicação:
$ docker compose up
O servidor estará acessível em: http://localhost:3000.
Documentação da API
A documentação está disponível no Swagger. Acesse:
http://localhost:3000/api
Screenshot
Casos de Teste
Executar Testes
$ docker compose run app sh -c "npm run test"Casos de Teste do VehicleController (E2E)
- POST /vehicle
- ✔ Deve criar um novo veículo
- ✔ Deve retornar erro se o veículo já existir
- PUT /vehicle/:id
- ✔ Deve atualizar um veículo pelo ID
- ✔ Deve retornar erro se o veículo não for encontrado
- ✔ Deve retornar erro ao tentar atualizar campos únicos
- GET /vehicle
- ✔ Deve retornar a primeira página de veículos
- ✔ Deve retornar a segunda página de veículos
- ✔ Deve retornar resultados da primeira página quando nenhuma consulta for fornecida
- ✔ Deve retornar erro para valores inválidos de página ou tamanho de página
- ✔ Deve retornar erro se a página solicitada exceder o máximo
- GET /vehicle/:id
- ✔ Deve retornar um veículo pelo ID
- ✔ Deve retornar erro se o veículo não for encontrado
- DELETE /vehicle/:id
- ✔ Deve deletar um veículo pelo ID
- ✔ Deve retornar sucesso ao deletar um veículo
- ✔ Deve retornar erro se o veículo não for encontrado
Casos de Teste do InMemoryVehicleRepository
- Criar Veículos
- ✔ Deve criar um novo veículo
- ✔ Deve retornar erro para campos únicos duplicados
- Consulta por ID
- ✔ Deve retornar um veículo pelo ID
- ✔ Deve retornar
nullpara IDs inexistentes
- Paginação
- ✔ Deve recuperar veículos com paginação
- ✔ Deve retornar erro para paginação inválida
- ✔ Deve retornar erro se a página solicitada exceder o máximo
- Atualização
- ✔ Deve atualizar campos como
brand,chassis,model,plate, erenavam - ✔ Deve retornar erro ao atualizar um veículo inexistente
- ✔ Deve retornar erro ao tentar atualizar com valores duplicados
- ✔ Deve atualizar campos como
- Deleção
- ✔ Deve deletar um veículo pelo ID
- ✔ Deve retornar sucesso ao deletar
- ✔ Deve retornar erro para veículos inexistentes
Cobertura de Testes
A cobertura de testes está configurada com nyc. Abaixo está o resumo atual:
-------------------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-------------------------------------|---------|----------|---------|---------|-------------------
All files | 0 | 0 | 0 | 0 |
src | 0 | 100 | 0 | 0 |
app.error.ts | 0 | 100 | 0 | 0 | 5-6
src/vehicle | 0 | 100 | 0 | 0 |
vehicle.mapper.ts | 0 | 100 | 0 | 0 | 6-18
src/vehicle/constants | 0 | 100 | 0 | 0 |
errors.constants.ts | 0 | 100 | 0 | 0 | 8-15
module.contants.ts | 0 | 100 | 100 | 0 | 3-9
src/vehicle/dto | 0 | 0 | 0 | 0 |
update-vehicle-data.dto.ts | 0 | 0 | 0 | 0 |
src/vehicle/entities | 0 | 0 | 0 | 0 |
vehicle.entity.ts | 0 | 0 | 0 | 0 | 15-48
src/vehicle/repositories | 0 | 0 | 0 | 0 |
in-memory.vehicle.repository.ts | 0 | 0 | 0 | 0 | 15-160
src/vehicle/repositories/interfaces | 0 | 0 | 0 | 0 |
vehicle.repository.ts | 0 | 0 | 0 | 0 |
-------------------------------------|---------|----------|---------|---------|-------------------
Como Gerar o Relatório de Cobertura
Para gerar o relatório de cobertura localmente, use:
$ docker compose run app sh -c "npm run test:cov"Os detalhes da cobertura serão exibidos no terminal.
On this page
Contributors
Created November 29, 2024
Updated October 29, 2025