Skip to content

fix: auditoria geral — Stripe, dashboards agregados e perf web#247

Merged
arthuurw merged 15 commits into
homologfrom
fix/fixes-gerais
Jun 26, 2026
Merged

fix: auditoria geral — Stripe, dashboards agregados e perf web#247
arthuurw merged 15 commits into
homologfrom
fix/fixes-gerais

Conversation

@arthuurw

Copy link
Copy Markdown
Owner

Resumo

Branch de fixes gerais (auditoria 2026-06). Consolida correções de backend (Stripe/billing), agregação de dashboards, performance web e atualização das specs.

Backend — Stripe / billing

  • Cursor persistido de reconciliação (high-water-mark) com cap de batch + sinalização de truncamento; cron abre issue com backfill via desde_utc.
  • Reconcilia onboarding Connect via Account.GetAsync; parse defensivo de charges_enabled/type no webhook.
  • Webhook lança em disputa sem id e refund sem valor; rejeita valor<=0 antes de criar PaymentIntent.
  • Boot falha em modo de chave Stripe divergente; valida Internal:ApiKey no startup em produção.
  • Gate de inadimplência do treinador nos endpoints pagos; estorno parcial mantém acesso (paridade com aluno).

Dashboards agregados

  • GET /admin/dashboard, /treinador/dashboard, /aluno/dashboard num round-trip; frontend colapsa N round-trips em 1.

Performance web

  • Lazy-load Stripe.js / recharts / Session Replay; cache via TanStack Query; sample rates Sentry safe-by-default; ISR landing.

Infra / CI

  • Dead-man's-switch (Healthchecks.io) em todos os crons; dependabot com prefixo chore.

Specs

  • Atualização das specification-* das áreas tocadas (estado REAL).

Testes

  • Suíte backend (xUnit) + vitest verdes localmente; gate de integração/E2E no CI.

arthuurw and others added 14 commits June 25, 2026 20:58
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…m aluno)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…einador

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

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

Cursor persistido (high-water-mark) substitui janela fixa now-7d: desde =
max(cursor, now-7d). Cursor avança monotônico e incrementalmente conforme
eventos são processados; crash no catch-up não re-varre o já-processado.
Cap de batch (MaxEventosReconciliacaoPorRun) → Truncado=true sinaliza backlog
sem perda (cursor só passa do último evento processado).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Endpoint /internal/reconciliar-pagamentos retorna 503 quando Truncado=true
(cap de batch atingido, backlog restante). curl -fsS do cron falha →
if:failure() abre issue instruindo retomada (desde_utc vazio = continua do
cursor; ou janela explícita p/ backfill). Nenhum evento perdido: cursor já
avançou só até o último processado.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
account.updated de conta conectada Express NÃO retorna no Events.List da
plataforma (confirmado via context7/docs Stripe: GET /v1/events lista eventos
do próprio account; eventos de conta conectada vêm por Connect webhook, e a
completude de onboarding se afere por Account retrieve + charges_enabled).
Logo a reconciliação ganha leg que itera ContaRecebimento configuradas e
pendentes, ativa via ContaEstaAtivadaAsync (Account.GetAsync) e confirma
onboarding pelo mesmo caminho idempotente do webhook. Cap por run + 1 GET por
conta p/ não estourar rate-limit.

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

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown

Coverage Report for frontend

Status Category Percentage Covered / Total
🔵 Lines 84.61% (🎯 95%) 3189 / 3769
🔵 Statements 82.74% (🎯 95%) 3473 / 4197
🔵 Functions 73.15% (🎯 95%) 902 / 1233
🔵 Branches 77.85% (🎯 90%) 1969 / 2529
File CoverageNo changed files found.
Generated in workflow #400 for commit 5c70402 by the Vitest Coverage Report Action

Aplica os bumps seguros e os majors compatíveis; segura os que quebram.

Aplicados:
- nuget: Scalar.AspNetCore 2.16.6, Stripe.net 52.1.0, Svix 1.96.1
- npm: @mui/x-date-pickers 9.7.0, @sentry/nextjs 10.61.0
- @vitejs/plugin-react 6.0.3 + vite 8.1.0 (vitest 4 já aceita vite 8; react() sem babel options)
- lint-staged 17.0.8
- zaproxy/action-baseline 0.15.0

Segurados (breaking sem fix viável hoje):
- eslint 10: eslint-plugin-react@7.37.5 (latest, via eslint-config-next) trava peer em eslint ^9.7; eslint 10 removeu context.getFilename -> lint quebra
- jsdom 29: quebra interceptor XHR do msw (undici extractBody: object.stream is not a function) no download de blob (LGPD export)
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