Skip to content

feat: ler do Supabase no site público (fecha o circuito admin→banco→home)#17

Open
DRoqueProgrammer wants to merge 1 commit into
mainfrom
feat/supabase-public-read
Open

feat: ler do Supabase no site público (fecha o circuito admin→banco→home)#17
DRoqueProgrammer wants to merge 1 commit into
mainfrom
feat/supabase-public-read

Conversation

@DRoqueProgrammer

Copy link
Copy Markdown
Owner

Problema

getGrupos() / getTurmas() liam sempre de data/seed.json, mesmo com Supabase configurado. Consequência: o admin gravava notas no banco, mas a home pública continuava exibindo o seed congelado. O revalidatePath("/") das server actions revalidava uma página que relia... o seed. A função getGruposFromSupabase() citada no comentário do data.ts nunca foi implementada — circuito aberto.

Solução

  • Implementa a leitura do Supabase via nested select (turmas → disciplinas → notas) em uma única query, sem N+1.
  • Extrai buildGrupo() compartilhado entre seed e Supabase — as duas fontes produzem exatamente o mesmo shape de Grupo (cores, stats, aprovação). Zero divergência de lógica.
  • getGrupos / getGrupoById / getTurmas / getTurma agora são async e roteiam: Supabase em produção, seed.json em demo.
  • Fallback defensivo: se a query falhar (erro) ou vier vazia, cai no seed e loga — a página nunca quebra, preservando a reprodutibilidade descrita no PRODUCT.md.
  • React.cache() no fetch: as 5 páginas/componentes compartilham uma única ida ao banco por render.
  • IDs de nota (bigserial) viram String(id), casando com o que updateNotaAction/deleteNotaAction já esperam.
  • Adiciona await nas chamadas nos 5 server components consumidores.

Verificação

Check Resultado
npx tsc --noEmit ✅ limpo
npm run build ✅ compila, home prerenderizada
curl / runtime ✅ 200, aprovações renderizadas server-side
curl /admin sem auth ✅ 307 → /admin/login (guard intacto)

Nota de design

As cores continuam vindo do design system (mapeadas por codigo da disciplina), não da coluna cor do banco — mantém o comportamento atual (cor é decisão de brand). O buildGrupo isolado facilita inverter isso no futuro, se desejado.

…anco→home)

Antes, getGrupos()/getTurmas() liam SEMPRE de data/seed.json, mesmo com
Supabase configurado. Consequência: o admin gravava notas no banco, mas a
home pública continuava mostrando o seed congelado — o revalidatePath("/")
das server actions não tinha efeito visível. A função getGruposFromSupabase()
citada no comentário nunca existiu.

Mudanças:
- Implementa a leitura do Supabase via nested select (turmas→disciplinas→notas)
  em uma única query, sem N+1.
- Extrai um buildGrupo() compartilhado entre seed e Supabase: as duas fontes
  produzem exatamente o mesmo shape de Grupo (cores, stats, aprovação).
- getGrupos/getGrupoById/getTurmas/getTurma agora são async e roteiam:
  Supabase em produção, seed.json em demo.
- Fallback defensivo: se a query falhar ou vier vazia, cai no seed e loga o
  erro — a página nunca quebra (mantém a reprodutibilidade do PRODUCT.md).
- React.cache() no fetch: as 5 páginas/componentes compartilham uma ida ao
  banco por render.
- IDs de nota (bigserial) viram String(id), casando com update/deleteNotaAction.
- Adiciona await nas chamadas nos 5 server components consumidores.

Verificado: tsc --noEmit limpo, npm run build OK, smoke test runtime
(home 200 com aprovações renderizadas, /admin 307→login).
@vercel

vercel Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ufmt-stats Ready Ready Preview, Comment Jul 2, 2026 7:17am

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