Entrar como:FuncionalidadesDoc
Pular para o conteúdo
← Voltar para a visão geral
✅ ConcluídoCard #7d · M1.5

Schema da Galeria (GalleryPost, PostLike, PostComment, SavedReference, Challenge)

Marco M1.5: Galeria Criativa & Portfólio (EAD Artes)

📅03 de agosto de 2026
👤Wellington Santiago (via ZCode)
🔧Commits: 93001b98bd4bc8

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

  • GalleryPostStatusPENDING | PUBLISHED | REJECTED | ARCHIVED (moderação)
  • Concept3EXCELENTE | BOM | A_MELHORAR (Desenho/Pintura)
  • Concept5A | B | C | D | E (matérias gerais)

Enums alterados (1)

  • GradingSystem — removido WEIGHTED, CONCEPT, CUSTOM (não usados); adicionado CONCEPT_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: status default PENDING (prof aprova → PUBLISHED)
  • Museu: isFeatured default false (direção marca → true)
  • Correção: hasTeacherCorrection, correctionData (JSON canvas), correctionVideoUrl (YouTube)
  • LGPD: StudentGuardian.consentPublicPortfolio default false

O que o próximo card (7e) precisa fazer

  • Página /aluno/tarefas/[taskId]/enviar com upload + flags
  • Procedure student.gallery.createFromSubmission e student.gallery.create
  • Procedure student.tasks.resubmit (usa allowResubmit + 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) — respeita allowResubmit e incrementa attemptNumber
  • findFirst substitui findUnique em 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.

← Voltar para a visão geral