📄 Documento de Execução — Card 7h: [M1.5] Ranking Top 3 Artistas do Mês
🎯 1. O que foi implementado
Página /aluno/galeria/ranking
- Pódio visual (🥇🥈🥉) com os 3 primeiros colocados da unidade no mês
- Top 10 completo com nome, avatar, métricas (curtidas, tarefas, nota) e score
- Minha posição destacada (mesmo se fora do top 10)
- Legenda explicando o cálculo do score
Cálculo do score (decisão #25)
score = (curtidas × 2) + (tarefasEntregues × 5) + (notaMédia × 10)
- Curtidas: PostLike em posts PUBLISHED do aluno no mês
- Tarefas: TaskSubmission (SUBMITTED/GRADED/LATE) no mês
- Nota: média de Grade.value (isPublished) no mês
Procedure student.gallery.ranking
- Calcula em tempo real (query, não job Bull)
- Filtra por branchId (unidade do aluno logado)
- Filtra por mês (default: mês atual, formato YYYY-MM)
- Retorna:
{ podium: top3, list: top10, myRank: {rank, score, likes, tasks, avgGrade}, month }
Aba Ranking na galeria
- Antes era placeholder ("em breve") → agora linka para a página completa
Decisão técnica: tempo real em vez de job Bull
- O job Bull diário (planejado na decisão #25) foi substituído por query em tempo real para DEV
- Motivo: Redis na VPS DEV tem problemas de eviction policy; job Bull pode falhar
- Para PROD: adicionar job Bull
update-artist-ranking com cache em Leaderboard
✅ Critérios de aceite
| # |
Critério |
Status |
| 1 |
Pódio visual (🥇🥈🥉) com fotos e scores |
✅ |
| 2 |
Top 10 completo da unidade |
✅ |
| 3 |
Minha posição destacada |
✅ |
| 4 |
Score = likes×2 + tasks×5 + nota×10 |
✅ |
| 5 |
Por unidade (branchId) |
✅ |
| 6 |
Build + deploy DEV |
✅ |
📁 2. Arquivos criados/modificados
Criados
| Arquivo |
Função |
src/app/(dashboard)/aluno/galeria/ranking/page.tsx |
Pódio + top 10 + minha posição |
Modificados
| Arquivo |
Mudança |
src/server/trpc/routers/student.ts |
gallery +ranking procedure |
src/app/(dashboard)/aluno/galeria/page.tsx |
aba Ranking linka para página completa |
🎯 3. Próximo card
Card 7i — Desafios Pedagógicos — tarefas temáticas fora do material didático.