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:prod
A 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=info
Uma 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-api
src/
├── 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