Uma API robusta de gerenciamento de produtos construída com NestJS, MongoDB, e sistema de logging abrangente.
- 🛍️ Gerenciamento de Produtos: Operações CRUD completas para produtos
- 🔍 Busca e Filtros Avançados: Filtrar por categoria, faixa de preço, com paginação e ordenação
- 📝 Logging Abrangente: Logging baseado em Winston com monitoramento de performance
- 🗄️ Integração MongoDB: ODM Mongoose com monitoramento de conexão
- 📚 Documentação da API: Documentação Swagger/OpenAPI
- ✅ Validação de Entrada: Integração com Class-validator
- 🧪 Testes: Testes unitários e de integração abrangentes
- 🐳 Suporte Docker: Aplicação containerizada
- Framework: NestJS
- Banco de Dados: MongoDB com Mongoose
- Logging: Winston com serviço de logger customizado
- Validação: Class-validator & Class-transformer
- Documentação: Swagger/OpenAPI
- Testes: Jest
- Linguagem: TypeScript
- Node.js (>= 16.x)
- MongoDB (>= 4.4)
- npm ou yarn
- Clone o repositório
git clone https://github.com/kaioid/product-catalog-api
cd product-catalog-api- Instale as dependências
npm install- Configure as variáveis de ambiente
cp .env.example .env
# Edite o .env com sua configuração- Inicie o MongoDB
# Usando Docker
docker run -d -p 27017:27017 --name mongodb mongo:latest
# Ou use sua instalação local do MongoDB
mongod- Execute a aplicação
# Modo de desenvolvimento com hot reload
npm run start:dev
# Modo de produção
npm run start:prodA API estará disponível em http://localhost:3000
Crie um arquivo .env no diretório raiz:
# Banco de Dados
MONGO_URI=mongodb://localhost:27017/product-catalog
# Servidor
PORT=3000
NODE_ENV=development
# Logging
LOG_LEVEL=infoUma vez que a aplicação estiver rodando, visite:
- Swagger UI:
http://localhost:3000/docs - Endpoints da API:
http://localhost:3000/products
Esta aplicação possui um sistema de logging abrangente com:
- Logging estruturado com Winston
- Monitoramento de performance para todas as operações
- Logging de requisições HTTP com tempos de resposta
- Monitoramento de conexão com banco de dados
- Rastreamento de ações de negócio
- Múltiplos níveis de log (error, warn, info, debug, verbose)
logs/app.log- Todos os logs da aplicaçãologs/error.log- Apenas logs de erro
Configure LOG_LEVEL em seu ambiente:
error- Apenas erroswarn- Avisos e errosinfo- Informações gerais (padrão)debug- Informações detalhadas de debugverbose- Detalhe máximo
Para documentação detalhada sobre logging, veja docs/LOGGING.md
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /products |
Listar todos os produtos com filtros |
| GET | /products/:id |
Obter produto por ID |
| POST | /products |
Criar novo produto |
| PUT | /products/:id |
Atualizar produto |
| DELETE | /products/:id |
Deletar produto |
category- Filtrar por categoriaminPrice- Filtro de preço mínimomaxPrice- Filtro de preço máximopage- Número da página (padrão: 1)limit- Itens por página (padrão: 10)sort- Ordenar por campo:direção (ex:price:asc)
# Testes unitários
npm run test
# Modo watch para testes
npm run test:watch
# Cobertura de testes
npm run test:cov
# Testes end-to-end
npm run test:e2e# Iniciar todos os serviços (app + MongoDB)
docker-compose up -d
# Ver logs
docker-compose logs -f
# Parar serviços
docker-compose down# Criar imagem
docker build -t product-catalog-api .
# Executar container
docker run -p 3000:3000 -e MONGO_URI=mongodb://host.docker.internal:27017/product-catalog product-catalog-apisrc/
├── common/ # Utilitários e serviços compartilhados
│ ├── database/ # Monitoramento de conexão com banco
│ └── logger/ # Sistema de logging
├── products/ # Módulo de produtos
│ ├── __mocks__/ # Mocks reutilizáveis para testes
│ ├── controller/ # Controllers HTTP
│ ├── dto/ # Objetos de transferência de dados
│ ├── schemas/ # Schemas do MongoDB
│ └── service/ # Serviços de lógica de negócio
├── app.module.ts # Módulo raiz da aplicação
└── main.ts # Bootstrap da aplicação