Skip to content

Sprint 0: plataforma base (Serilog, CI, Dependabot, docker-compose)#1

Merged
gustavograciano merged 1 commit into
mainfrom
feat/sprint-0-platform
Apr 21, 2026
Merged

Sprint 0: plataforma base (Serilog, CI, Dependabot, docker-compose)#1
gustavograciano merged 1 commit into
mainfrom
feat/sprint-0-platform

Conversation

@gustavograciano

Copy link
Copy Markdown
Owner

Summary

Primeira entrega do Sprint 0 do PLANO-DESENVOLVIMENTO.md — base técnica antes de refatorar o domínio.

  • Observabilidade: Serilog com bootstrap logger + UseSerilogRequestLogging + sinks Console/Seq (levels sobrepostos em AspNetCore/EF/System). Seq local em http://localhost:5341.
  • Infra dev: docker-compose.yml ganhou serviços seq e minio (API + console web em 9000/9001). Senhas do SA do SQL e do MinIO passaram para env vars com default de dev.
  • CI: backend-ci.yml (restore/build/test Release + dotnet list package --vulnerable) e frontend-ci.yml (lint/build/audit com cache npm). Pipelines disparam em push/PR em main com path filters.
  • Dependabot: NuGet (API + Tests), npm, github-actions e docker — com grouping de updates correlacionados (ASP.NET, Serilog, React, Vite, ESLint) pra reduzir ruído de PRs.
  • Docs: PLANO-DESENVOLVIMENTO.md versionado no repo como single source of truth do roadmap de 14 sprints.

O que fica pra próximo PR

  • Sprint 1 — refatoração da solução em 5 projetos (Domain/Application/Infrastructure/Api/Jobs) + entidades Empreendimento/Torre/Tipologia/HistoricoPreco + migration.
  • Untrack dos obj/** que ficaram no índice de commits anteriores (chore separado).

Test plan

  • dotnet build ImovelStand.sln --configuration Release sem warnings
  • dotnet test — 8 testes passando
  • cd imovelstand-frontend && npm ci && npm run lint && npm run build verde
  • docker compose up seq — Seq acessível em http://localhost:5341
  • Rodar API local, fazer request e confirmar log estruturado no Seq
  • Workflows backend-ci e frontend-ci verdes neste PR

🤖 Generated with Claude Code

- Serilog com bootstrap logger, ReadFromConfiguration e request logging;
  sinks Console + Seq (levels overridden para AspNetCore/EF Core/System)
- docker-compose: servicos Seq (5341) e MinIO (9000/9001); senhas movidas
  para env vars com default de dev
- backend-ci.yml: restore/build/test Release + check de pacotes vulneraveis
- frontend-ci.yml: lint/build/audit com cache npm
- dependabot.yml: NuGet (API+Tests), npm, github-actions, docker com
  grouping de updates relacionados (aspnet, serilog, react, vite, eslint)
- PLANO-DESENVOLVIMENTO.md: roadmap 14 sprints versionado no repo

Build verde (0 warnings), 8 testes passando, lint + build frontend ok.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@gustavograciano gustavograciano merged commit aaf48ca into main Apr 21, 2026
2 checks passed
gustavograciano added a commit that referenced this pull request Apr 22, 2026
Sprint 8: Espelho de vendas PDF (QuestPDF) - diferencial #1
gustavograciano added a commit that referenced this pull request Apr 23, 2026
Bugs identificados em teste ponta-a-ponta com Chrome extension.

#1 Migrations: log detalhado + fail-fast
- Program.cs agora lista migrations pendentes antes de aplicar
- Em erro de migration, re-lanca exception (fail-fast) ao inves de silenciar
- Evita que API suba com schema desatualizado

#2 Seed Assinatura ativa do tenant demo (CRITICAL)
- ApplicationDbContext.SeedData agora cria Assinatura ativa (Plano Pro)
- Sem isso todos endpoints com [RequiresPlan] retornavam 402 e bloqueavam
  criacao de apartamento, empreendimento e usuario no ambiente dev/demo
- Migration SeedAssinaturaECorretorComissao aplica o seed

#3 Mask stack trace em producao (ja resolvido)
- ProblemDetailsMiddleware ja verifica IsDevelopment() antes de expor
  detalhes. Comportamento correto: stack trace so em dev

#4 + #5 NovaVendaDialog: auto-preencher da proposta + submit silencioso
- Root cause: MUI TextField select + RHF register() nao dispara onChange
  confiavelmente e nao re-renderiza com setValue
- Todos os Select sao controlados explicitamente (value=watch, onChange=setValue)
- Auto-fill via reset() completo ao inves de setValue individual (forca
  re-render dos inputs numericos uncontrolled)

#6 Comissoes nao geradas ao criar venda
- Root cause: seed Corretor nao tinha PercentualComissao
- Corretor Teste agora tem PercentualComissao=3% + CRECI
- Venda criada para este corretor gera Comissao automaticamente

#7 Vite strictPort
- vite.config.js: server.port=5173 + strictPort=true
- Falha ao iniciar se porta ocupada, evitando confusao dev com processo antigo

#8 Espelho de vendas: todas as torres agora aparecem
- MapaEmpreendimento agrupa primeiro por Torre (blocos separados), depois
  por pavimento. Antes misturava aptos de torres diferentes na mesma linha
- Legenda unica no rodape ao inves de uma por torre

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
gustavograciano added a commit that referenced this pull request Apr 23, 2026
* fix(qa): 7 bugs encontrados no QA E2E

Bugs identificados em teste ponta-a-ponta com Chrome extension.

#1 Migrations: log detalhado + fail-fast
- Program.cs agora lista migrations pendentes antes de aplicar
- Em erro de migration, re-lanca exception (fail-fast) ao inves de silenciar
- Evita que API suba com schema desatualizado

#2 Seed Assinatura ativa do tenant demo (CRITICAL)
- ApplicationDbContext.SeedData agora cria Assinatura ativa (Plano Pro)
- Sem isso todos endpoints com [RequiresPlan] retornavam 402 e bloqueavam
  criacao de apartamento, empreendimento e usuario no ambiente dev/demo
- Migration SeedAssinaturaECorretorComissao aplica o seed

#3 Mask stack trace em producao (ja resolvido)
- ProblemDetailsMiddleware ja verifica IsDevelopment() antes de expor
  detalhes. Comportamento correto: stack trace so em dev

#4 + #5 NovaVendaDialog: auto-preencher da proposta + submit silencioso
- Root cause: MUI TextField select + RHF register() nao dispara onChange
  confiavelmente e nao re-renderiza com setValue
- Todos os Select sao controlados explicitamente (value=watch, onChange=setValue)
- Auto-fill via reset() completo ao inves de setValue individual (forca
  re-render dos inputs numericos uncontrolled)

#6 Comissoes nao geradas ao criar venda
- Root cause: seed Corretor nao tinha PercentualComissao
- Corretor Teste agora tem PercentualComissao=3% + CRECI
- Venda criada para este corretor gera Comissao automaticamente

#7 Vite strictPort
- vite.config.js: server.port=5173 + strictPort=true
- Falha ao iniciar se porta ocupada, evitando confusao dev com processo antigo

#8 Espelho de vendas: todas as torres agora aparecem
- MapaEmpreendimento agrupa primeiro por Torre (blocos separados), depois
  por pavimento. Antes misturava aptos de torres diferentes na mesma linha
- Legenda unica no rodape ao inves de uma por torre

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: documento de apresentacao do sistema pos QA E2E

Compilacao das validacoes de QA ponta-a-ponta apos correcao dos 8 bugs
(PR #62). Descreve em detalhe cada tela e funcionalidade dos 5
diferenciais competitivos + fluxo comercial core (cliente -> proposta
-> venda -> contrato -> comissao).

Tabela de RBAC validado por endpoint + role.
Credenciais demo + URLs locais.
Roadmap de integracoes externas que ficam como etapa de producao.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
gustavograciano added a commit that referenced this pull request May 3, 2026
Sprint 0: plataforma base (Serilog, CI, Dependabot, docker-compose)
gustavograciano added a commit that referenced this pull request May 3, 2026
Sprint 8 (marcada 3 estrelas no plano): o que fecha venda com diretor
comercial. 3 templates de espelho profissional.

Application:
- EspelhoPdfGenerator (QuestPDF Community license):
  - Comercial: A4 portrait, lista plana ordenada por pavimento+numero
    com Tipologia/Quartos/Area/Preco/Status badge colorida
  - PorTorre: A3 landscape, grid visual tipo "espelho de verdade"
    com apto por celula colorida pelo status, legenda no final
  - Executivo: A4 portrait com 4 KPIs (VGV Total/Vendido/%Vendido/
    Preco Medio m²) + tabela de distribuicao por status + breakdown
    por torre
- Todos com watermark "CONFIDENCIAL" + data/hora + usuario no footer
- Cores semanticas por StatusApartamento (verde/ambar/laranja/vermelho)
- Enum TipoEspelho

Api:
- GET /api/empreendimentos/{id}/espelho?tipo=Comercial|PorTorre|
  Executivo retorna application/pdf stream
- Filename "espelho-{slug}-{tipo}-{timestamp}.pdf"
- Log estruturado (quem gerou, qual empreendimento, quando)

Tests (91 total, +5):
- Gera PDF nao-vazio para os 3 tipos (theory)
- Magic bytes do PDF (%PDF)
- Sem apartamentos ainda gera PDF valido (edge case empreendimento
  recem cadastrado)
- TipoEspelho invalido lanca ArgumentOutOfRangeException

Pacotes:
- Application: QuestPDF 2024.10.2
gustavograciano added a commit that referenced this pull request May 3, 2026
Sprint 8: Espelho de vendas PDF (QuestPDF) - diferencial #1
gustavograciano added a commit that referenced this pull request May 3, 2026
Bugs identificados em teste ponta-a-ponta com Chrome extension.

#1 Migrations: log detalhado + fail-fast
- Program.cs agora lista migrations pendentes antes de aplicar
- Em erro de migration, re-lanca exception (fail-fast) ao inves de silenciar
- Evita que API suba com schema desatualizado

#2 Seed Assinatura ativa do tenant demo (CRITICAL)
- ApplicationDbContext.SeedData agora cria Assinatura ativa (Plano Pro)
- Sem isso todos endpoints com [RequiresPlan] retornavam 402 e bloqueavam
  criacao de apartamento, empreendimento e usuario no ambiente dev/demo
- Migration SeedAssinaturaECorretorComissao aplica o seed

#3 Mask stack trace em producao (ja resolvido)
- ProblemDetailsMiddleware ja verifica IsDevelopment() antes de expor
  detalhes. Comportamento correto: stack trace so em dev

#4 + #5 NovaVendaDialog: auto-preencher da proposta + submit silencioso
- Root cause: MUI TextField select + RHF register() nao dispara onChange
  confiavelmente e nao re-renderiza com setValue
- Todos os Select sao controlados explicitamente (value=watch, onChange=setValue)
- Auto-fill via reset() completo ao inves de setValue individual (forca
  re-render dos inputs numericos uncontrolled)

#6 Comissoes nao geradas ao criar venda
- Root cause: seed Corretor nao tinha PercentualComissao
- Corretor Teste agora tem PercentualComissao=3% + CRECI
- Venda criada para este corretor gera Comissao automaticamente

#7 Vite strictPort
- vite.config.js: server.port=5173 + strictPort=true
- Falha ao iniciar se porta ocupada, evitando confusao dev com processo antigo

#8 Espelho de vendas: todas as torres agora aparecem
- MapaEmpreendimento agrupa primeiro por Torre (blocos separados), depois
  por pavimento. Antes misturava aptos de torres diferentes na mesma linha
- Legenda unica no rodape ao inves de uma por torre
gustavograciano added a commit that referenced this pull request May 3, 2026
* fix(qa): 7 bugs encontrados no QA E2E

Bugs identificados em teste ponta-a-ponta com Chrome extension.

#1 Migrations: log detalhado + fail-fast
- Program.cs agora lista migrations pendentes antes de aplicar
- Em erro de migration, re-lanca exception (fail-fast) ao inves de silenciar
- Evita que API suba com schema desatualizado

#2 Seed Assinatura ativa do tenant demo (CRITICAL)
- ApplicationDbContext.SeedData agora cria Assinatura ativa (Plano Pro)
- Sem isso todos endpoints com [RequiresPlan] retornavam 402 e bloqueavam
  criacao de apartamento, empreendimento e usuario no ambiente dev/demo
- Migration SeedAssinaturaECorretorComissao aplica o seed

#3 Mask stack trace em producao (ja resolvido)
- ProblemDetailsMiddleware ja verifica IsDevelopment() antes de expor
  detalhes. Comportamento correto: stack trace so em dev

#4 + #5 NovaVendaDialog: auto-preencher da proposta + submit silencioso
- Root cause: MUI TextField select + RHF register() nao dispara onChange
  confiavelmente e nao re-renderiza com setValue
- Todos os Select sao controlados explicitamente (value=watch, onChange=setValue)
- Auto-fill via reset() completo ao inves de setValue individual (forca
  re-render dos inputs numericos uncontrolled)

#6 Comissoes nao geradas ao criar venda
- Root cause: seed Corretor nao tinha PercentualComissao
- Corretor Teste agora tem PercentualComissao=3% + CRECI
- Venda criada para este corretor gera Comissao automaticamente

#7 Vite strictPort
- vite.config.js: server.port=5173 + strictPort=true
- Falha ao iniciar se porta ocupada, evitando confusao dev com processo antigo

#8 Espelho de vendas: todas as torres agora aparecem
- MapaEmpreendimento agrupa primeiro por Torre (blocos separados), depois
  por pavimento. Antes misturava aptos de torres diferentes na mesma linha
- Legenda unica no rodape ao inves de uma por torre

* docs: documento de apresentacao do sistema pos QA E2E

Compilacao das validacoes de QA ponta-a-ponta apos correcao dos 8 bugs
(PR #62). Descreve em detalhe cada tela e funcionalidade dos 5
diferenciais competitivos + fluxo comercial core (cliente -> proposta
-> venda -> contrato -> comissao).

Tabela de RBAC validado por endpoint + role.
Credenciais demo + URLs locais.
Roadmap de integracoes externas que ficam como etapa de producao.

---------
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