Skip to content

Sprint 1 · #2 — Implementar API de Catálogo de Produtos - #11

Merged
c4rlosfb merged 2 commits into
masterfrom
fix/issue-2
Jun 23, 2026
Merged

Sprint 1 · #2 — Implementar API de Catálogo de Produtos#11
c4rlosfb merged 2 commits into
masterfrom
fix/issue-2

Conversation

@KauaN-png

Copy link
Copy Markdown
Collaborator

Resolve a issue #2.

Alterações realizadas:

  • app/catalog.js — Novo módulo com:
    • 4 categorias seed (Eletrônicos, Roupas, Casa & Cozinha, Livros)
    • 16 produtos seed com dados variados (preços, estoques, descrições)
    • GET /api/categories — Listar categorias
    • POST /api/categories — Criar categoria
    • GET /api/products — Listar produtos (com filtro ?categoria= e ?busca=)
    • GET /api/products/:id — Detalhe do produto
    • POST /api/products — Criar produto (admin)
    • PUT /api/products/:id — Atualizar produto (admin)
    • DELETE /api/products/:id — Remover produto (admin)
    • PATCH /api/products/:id/stock — Atualizar estoque
    • Logs estruturados em todas as operações
  • app/app.js — Montagem das rotas do catálogo sob o prefixo /api

@KauaN-png KauaN-png assigned c4rlosfb and KauaN-png and unassigned c4rlosfb Jun 23, 2026
@KauaN-png

Copy link
Copy Markdown
Collaborator Author

📋 Code Review — PR #11 — Catálogo de Produtos (Issue #2)

🚨 Erro Crítico

  1. node_modules/ foi commitado (2.541 arquivos, ~590K linhas) ⚠️⚠️⚠️
    O diff do PR mostra 593.762 adições, das quais ~593.500 são de node_modules/ — dependências de terceiros como ESLint, express, etc.

    Problemas:

    • Torna o PR impossível de revisar (o diff ultrapassou o limite de 300 arquivos do GitHub)
    • Polui o repositório permanentemente
    • node_modules/ NUNCA deve ser versionado

    Causa raiz: O .gitignore foi adicionado no PR Sprint 1 · #1 — Configurar CI/CD com GitHub Actions #10, que ainda não foi mergeado. Este PR (Sprint 1 · #2 — Implementar API de Catálogo de Produtos #11) foi criado a partir do master sem .gitignore, então o npm install gerou node_modules/ que foi commitado acidentalmente.

    Solução necessária:

    # Remover node_modules do tracking
    git rm -r --cached app/node_modules/
    
    # Se PR #10 já estiver mergeado, o .gitignore já existe
    # Se não, criar .gitignore ou copiar do fix/issue-1:
    git checkout fix/issue-1 -- .gitignore
    
    # Commit da correção
    git add -A
    git commit -m "fix: remove node_modules do versionamento e adiciona .gitignore"
    git push

✅ Acertos

  1. API RESTful completa — CRUD completo de produtos com 7 endpoints bem RESTful (GET, POST, PUT, DELETE, PATCH)
  2. Validação de entrada robusta — Campos obrigatórios checados, categoria validada antes de criar produto, estoque validado como inteiro >= 0
  3. Logs estruturados — Padrão [timestamp] [LEVEL] [Catalogo] mensagem em todas as operações
  4. Seed data realista — 4 categorias e 16 produtos com dados variados e coerentes
  5. Filtros na listagem — Suporte a ?categoria= e ?busca= com implementação limpa via spread + filter
  6. Rotas bem organizadas — Módulo isolado (catalog.js) montado sob prefixo /api em app.js
  7. Tratamento de erro 404/400 — Produto não encontrado → 404, dados inválidos → 400

⚠️ Warnings

  1. Dados em memória voláteis — Os arrays categories e products são reinicializados a cada restart do servidor. Para um laboratório de observabilidade está ok, mas vale documentar essa limitação.

  2. DELETE /api/products/:id retorna 204 sem body — Correto semanticamente, mas o res.status(204).send() pode causar problemas com alguns clientes HTTP. O padrão é usar res.status(204).end().

  3. criadoEm usa new Date().toISOString() a cada request — Nos produtos seed, todos terão o mesmo timestamp (hora do primeiro request, não da criação real). Considere usar um timestamp fixo no seed.

💡 Sugestões

  1. Extrair seed data para arquivo separado — Os 16 produtos + 4 categorias poderiam ficar em app/catalog-seed.js para manter catalog.js focado nas rotas.

  2. Validação de precoparseFloat(preco) aceita strings como "abc"NaN. Considere validar:

    preco: (() => {
      const p = parseFloat(preco);
      if (isNaN(p) || p <= 0) throw new Error('Preço inválido');
      return p;
    })()
  3. Proteção de rotas admin — POST, PUT, DELETE e PATCH não têm autenticação. Para um lab de observabilidade é aceitável, mas vale documentar.


Veredito: ❌ Mudanças solicitadas — node_modules/ precisa ser removido do versionamento antes do merge.

@KauaN-png

Copy link
Copy Markdown
Collaborator Author

🔧 Correção Aplicada

O problema do node_modules/ commitado foi corrigido:

O que foi feito

  1. git rm -r --cached app/node_modules/ — Removeu os 2.539 arquivos de node_modules/ do tracking do git (mantendo os arquivos localmente)
  2. .gitignore adicionado — Copiado da branch fix/issue-1, ignorando node_modules/, .env, .docker/, etc.
  3. Commit e pushb110baa: "fix: remove node_modules do versionamento e adiciona .gitignore"

Resultado

Antes Depois
~593.762 adições (99% node_modules) +229 adições (só código real)
2.541 arquivos no diff 3 arquivos no diff
Diff ultrapassou limite de 300 arquivos do GitHub Diff visível e revisável ✅

✅ Pronto para merge

O PR agora está limpo e pode ser mergeado em master.

@c4rlosfb
c4rlosfb merged commit ce4bc32 into master Jun 23, 2026
@c4rlosfb
c4rlosfb deleted the fix/issue-2 branch June 23, 2026 17:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants