Skip to content

F2: porte da API para NestJS (+ F3 Fase 0: baseline visual) - #1

Merged
yan-vidal merged 19 commits into
mainfrom
f3-visual-baseline
Jun 14, 2026
Merged

yan-vidal merged 19 commits into
mainfrom
f3-visual-baseline

Conversation

@yan-vidal

Copy link
Copy Markdown
Owner

Resumo

Porte completo da API legada (Express/Mongoose) para NestJS com paridade de contrato (F2), sobre a branch que também carrega o baseline de paridade visual da F3 Fase 0. O front Vue legado deve continuar funcionando apontado para esta API.

Specs: .specs/features/02-api-nest-port/ · Aceitação: .specs/features/02-api-nest-port/acceptance.md

Incluído

  • Auth (/authentication): JWT com expiresIn: 1h (corrige o bug legado exp * 100000), guard 401, throttle no login.
  • Geo (/countries, /states, /cities) e Tags (/tags, /tags/sync): CRUD com validação anti-injeção.
  • Serviços externos injetáveis (sem estado global): Storage S3, Google Vision/Geocoding (HTTP mockável), EXIF (perfis de câmera) + derivativos sharp.
  • Imagens: GET /images (filtros, allowlist de metadata, paginação, deep-link por id com expansão de limit, prefixo de URL), PATCH/DELETE /images/:id, POST /images (upload multipart com pipeline + rollback de S3).
  • F3 Fase 0: goldens Playwright do front legado + characterization tests do resize() do modal.

Exceções de contrato (aprovadas na spec — detalhes em acceptance.md)

  • 401 em rotas protegidas (legado: 403); 404 para ids inexistentes (legado: 500); injeção de operador Mongo eliminada via allowlist; PATCH sem metadata não quebra; EXIF lido do arquivo Original; geocoding resiliente; sem log de payloads externos.

Verificação (Node 26)

  • pnpm lint · pnpm typecheck · pnpm build — OK
  • pnpm test — 77 testes / 21 arquivos cobrindo todas as rotas F2
  • pnpm exec sentiness check --tier=standard — status: ok

Notas

  • Sentiness baseline estava vazio; reinicializado (baseline init) — suprime 25 falsos-positivos pré-existentes do knip (deps Nuxt, multer via FilesInterceptor, @sentiness/check-*, eslint). newInDiff limpo. Deps genuinamente não usadas (nock, @types/multer) foram removidas.
  • Smoke manual do front legado contra a API Nest fica pendente de infra real (checklist em acceptance.md), a validar antes do cutover (F7).

🤖 Generated with Claude Code

yan-vidal and others added 19 commits June 12, 2026 14:43
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yan-vidal
yan-vidal merged commit 7d97064 into main Jun 14, 2026
1 check passed
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.

1 participant