📄 Documento de Execução — Card 7d: [M1.5] Schema da Galeria
| Campo | Valor |
|---|---|
| Card Trello | [7d] [M1.5] Schema da Galeria |
| URL Trello | https://trello.com/c/jfOIdOWP |
| Marco | M1.5 (Galeria Criativa & Portfólio — EAD Artes) |
| Data execução | 04/08/2026 |
| Responsável | Wellington Santiago (via ZCode) |
| Doc anterior | Card 16 — Comunicados para Turma (M3) |
| Próximo card | Card 7e — Upload de Trabalho + Refazer Exercício |
| Commits | 93001b9, 8bd4bc8 |
| Deploy DEV | https://sistemaescolar.wellka.com.br |
🎯 1. O que foi implementado
Criada a fundação de dados (schema Prisma) para toda a Galeria Criativa do M1.5. Este card não cria telas — apenas prepara o banco de dados com 5 models novos, 3 enums novos, e alterações em models existentes para suportar: mural da turma, curtidas, comentários, portfólio público, desafios pedagógicos, correção visual do professor, vídeo-correção, refazer exercício, e consentimento LGPD para menores.
Models criados (5 novos)
- GalleryPost — post da galeria com ~30 campos (moderação 2 níveis, Museu, correção visual/vídeo, métricas denormalizadas)
- PostLike — curtida (1 por usuário por post,
@@unique) - PostComment — comentário com threading (respostas aninhadas via
parentId) - SavedReference — bookmark de inspiração (1 por usuário por post,
@@unique) - Challenge — desafio pedagógico (tarefa temática fora de material, por unidade)
Enums criados (3 novos)
- GalleryPostStatus —
PENDING | PUBLISHED | REJECTED | ARCHIVED(moderação) - Concept3 —
EXCELENTE | BOM | A_MELHORAR(Desenho/Pintura) - Concept5 —
A | B | C | D | E(matérias gerais)
Enums alterados (1)
- GradingSystem — removido
WEIGHTED, CONCEPT, CUSTOM(não usados); adicionadoCONCEPT_3, CONCEPT_5
Models alterados (2)
- TaskSubmission — adicionado
attemptNumber Int @default(1)+allowResubmit Boolean @default(false); removido@@unique([taskId, studentId])(permite refazer); adicionado@@index([taskId, studentId, attemptNumber]) - StudentGuardian — adicionado
consentPublicPortfolio Boolean @default(false)+consentSignedAt+consentSignedBy(LGPD <13 anos)
Relações reversas adicionadas (6 models)
User (8 relações), Branch (galleryPosts, challenges), Course (galleryPosts, challenges), Subject (galleryPosts), Lesson (galleryPosts), Task (galleryPosts)
Ajuste de código (student.ts)
Substituído findUnique(taskId_studentId) → findFirst(orderBy: attemptNumber desc) em 3 pontos. Lógica de submit reescrita para respeitar allowResubmit: se true, cria nova tentativa (attemptNumber+1); se false, atualiza a entrega existente.
Decisão técnica: db push em vez de migrate dev
O banco DEV tinha drift (tabelas criadas via db push nos cards anteriores não estavam nas migrations formais). Usar migrate dev exigiria reset completo (perda de dados). Solução: prisma db push --accept-data-loss (seguro pois nenhum curso usava WEIGHTED/CONCEPT/CUSTOM).
✅ Critérios de aceite validados
| # | Critério | Status |
|---|---|---|
| 1 | Models GalleryPost, PostLike, PostComment, SavedReference, Challenge criados | ✅ |
| 2 | Enum GalleryPostStatus (PENDING/PUBLISHED/REJECTED/ARCHIVED) | ✅ |
| 3 | Enum GradingSystem atualizado (NUMERIC, CONCEPT_3, CONCEPT_5) | ✅ |
| 4 | Enums Concept3 e Concept5 criados | ✅ |
| 5 | TaskSubmission: attemptNumber + allowResubmit + unique removido | ✅ |
| 6 | StudentGuardian.consentPublicPortfolio (LGPD) | ✅ |
| 7 | Migration aplicada + prisma generate + build passa | ✅ |
| 8 | Deploy DEV funcional (Health 200) | ✅ |
📁 2. Arquivos criados/modificados
Modificados
| Arquivo | Mudança |
|---|---|
prisma/schema.prisma |
+217 linhas (5 models, 3 enums, alterações em 8 models) |
src/server/trpc/routers/student.ts |
Ajuste: findUnique→findFirst + lógica refazer (attemptNumber) |
🗄️ 3. Schema do banco (mudanças)
5 tabelas novas: gallery_posts, post_likes, post_comments, saved_references, challenges
2 tabelas alteradas: task_submissions (+attemptNumber, +allowResubmit, -unique), student_guardians (+consentPublicPortfolio, +consentSignedAt, +consentSignedBy)
1 enum alterado: GradingSystem (NUMERIC, CONCEPT_3, CONCEPT_5)
2 enums novos: Concept3, Concept5
1 enum novo: GalleryPostStatus
Aplicado via prisma db push --accept-data-loss (sem migration formal, devido a drift histórico do DEV).
🔌 4. Handoff para o próximo card (7e)
Models disponíveis para os próximos cards
GalleryPost— pronto para criar posts (Card 7e upload, 7f feed, 7g portfólio)PostLike,PostComment,SavedReference— prontos (Card 7f curtir/comentar, 7j salvar)Challenge— pronto (Card 7i desafios)TaskSubmission.attemptNumber/allowResubmit— prontos (Card 7e refazer)
Regras de negócio já no schema
- Galeria é POR UNIDADE:
GalleryPost.branchIdé obrigatório - Moderação:
statusdefaultPENDING(prof aprova →PUBLISHED) - Museu:
isFeatureddefaultfalse(direção marca →true) - Correção:
hasTeacherCorrection,correctionData(JSON canvas),correctionVideoUrl(YouTube) - LGPD:
StudentGuardian.consentPublicPortfoliodefaultfalse
O que o próximo card (7e) precisa fazer
- Página
/aluno/tarefas/[taskId]/enviarcom upload + flags - Procedure
student.gallery.createFromSubmissionestudent.gallery.create - Procedure
student.tasks.resubmit(usaallowResubmit+attemptNumber) - Botão "Refazer exercício" condicional (
allowResubmit === true)
📋 5. Checklist do Trello — status por item
Entregas (7/7): ✅ todos concluídos Especificação Técnica (27/27): ✅ todos concluídos Validar com Cliente (1/7): 1 confirmado (A melhorar permite refazer), 6 permanecem pendentes para validação futura
🚀 6. Deploy DEV
- Build:
✓ Compiled successfully(local + VPS) - pm2 restart:
genioon-dev --update-env— online - Smoke test: Health 200, Login 307, Aluno 307, Doc 200
- Banco validado: 5 tabelas + colunas novas + enum atualizado confirmados via SQL
🧠 7. Contexto gerado para próximas etapas
- Schema pronto para os 8 cards seguintes do M1.5 (7e, 7f, 7g, 7h, 7i, 7j, 14b, 14c)
- Lógica de refazer exercício já implementada no backend (
student.tasks.submit) — respeitaallowResubmite incrementaattemptNumber findFirstsubstituifindUniqueem consultas de TaskSubmission (sem compound unique)- Próximos cards só precisam criar telas + procedures; o schema está completo
🎯 8. Próximo card
Card 7e — Upload de Trabalho + Refazer Exercício + Flags Telas de upload de trabalhos artísticos (JPG/PNG/PDF preview, PSD só download) + fluxo de refazer exercício. Usa o schema criado neste card.