Skip to content

kaioid/product-catalog-api

Repository files navigation

API de Catálogo de Produtos

Uma API robusta de gerenciamento de produtos construída com NestJS, MongoDB, e sistema de logging abrangente.

Funcionalidades

  • 🛍️ 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

Stack Tecnológica

  • 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

Início Rápido

Pré-requisitos

  • Node.js (>= 16.x)
  • MongoDB (>= 4.4)
  • npm ou yarn

Instalação

  1. Clone o repositório
git clone https://github.com/kaioid/product-catalog-api
cd product-catalog-api
  1. Instale as dependências
npm install
  1. Configure as variáveis de ambiente
cp .env.example .env
# Edite o .env com sua configuração
  1. Inicie o MongoDB
# Usando Docker
docker run -d -p 27017:27017 --name mongodb mongo:latest

# Ou use sua instalação local do MongoDB
mongod
  1. 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

Configuração do Ambiente

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

Documentação da API

Uma vez que a aplicação estiver rodando, visite:

  • Swagger UI: http://localhost:3000/docs
  • Endpoints da API: http://localhost:3000/products

Sistema de Logging

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)

Arquivos de Log

  • logs/app.log - Todos os logs da aplicação
  • logs/error.log - Apenas logs de erro

Níveis de Log

Configure LOG_LEVEL em seu ambiente:

  • error - Apenas erros
  • warn - Avisos e erros
  • info - Informações gerais (padrão)
  • debug - Informações detalhadas de debug
  • verbose - Detalhe máximo

Para documentação detalhada sobre logging, veja docs/LOGGING.md

Endpoints da API

Produtos

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

Parâmetros de Consulta para GET /products

  • category - Filtrar por categoria
  • minPrice - Filtro de preço mínimo
  • maxPrice - Filtro de preço máximo
  • page - 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

# 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

Suporte Docker

Usando Docker Compose

# Iniciar todos os serviços (app + MongoDB)
docker-compose up -d

# Ver logs
docker-compose logs -f

# Parar serviços
docker-compose down

Build Manual com Docker

# 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

Estrutura do Projeto

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