📄 Documento de Execução — Card 7e: [M1.5] Upload de Trabalho + Refazer Exercício
| Campo | Valor |
|---|---|
| Card Trello | [7e] [M1.5] Upload de Trabalho + Refazer Exercício |
| URL Trello | https://trello.com/c/eFZRGWfG |
| Marco | M1.5 (Galeria Criativa & Portfólio — EAD Artes) |
| Data execução | 04/08/2026 |
| Responsável | Wellington Santiago (via ZCode) |
| Doc anterior | Card 7d — Schema da Galeria |
| Próximo card | Card 7f — Mural da Turma |
| Commits | 66c53e6 |
| Deploy DEV | https://sistemaescolar.wellka.com.br |
🎯 1. O que foi implementado
Implementadas as telas de upload de trabalhos artísticos e o fluxo de refazer exercício. O aluno pode subir sua arte (JPG/PNG/PDF com preview, PSD/AI/KRA só download), escrever sobre o processo, marcar flags ("Quero correção do Prof" / "Deixar privado") e publicar na galeria (sempre como PENDING para moderação). Quando o professor marca allowResubmit=true (tirou "A Melhorar"), o aluno vê um botão "Refazer exercício".
Procedures tRPC criadas (student.gallery)
createFromSubmission— criaGalleryPosta partir de entrega de tarefa (vincula taskId/submissionId/courseId/subjectId). Valida que aluno tem matrícula ativa.isPrivate=truenão cria post.create— cria post direto (sem tarefa, para posts espontâneos ou desafios).myPosts— lista posts do próprio aluno (para aba "Meus Trabalhos").
Páginas criadas
/aluno/tarefas/[taskId]/enviar— formulário de upload com drag&drop de imagem, upload de PSD separado, textarea de descrição (char counter), checkboxes (wantsReview/isPrivate), botão PUBLICAR NA GALERIA. Cria GalleryPost status=PENDING./aluno/tarefas/[taskId]/refazer— mostra feedback anterior + formulário de nova entrega. Bloqueia seallowResubmit !== true. Usa a proceduresubmitexistente (que já incrementaattemptNumberquandoallowResubmit=true).
Página existente alterada
/aluno/tarefas/[taskId](detalhe da tarefa) — adicionados 2 botões:- "Publicar na Galeria" (azul, aparece após entregar) → leva para
/enviar - "Refazer exercício" (âmbar, aparece quando
allowResubmit===true) → leva para/refazer
- "Publicar na Galeria" (azul, aparece após entregar) → leva para
Procedure detail alterada
Retorno agora inclui allowResubmit e attemptNumber no objeto submission (necessário para o botão condicional de refazer).
i18n
39 chaves em student.galleryUpload adicionadas nos 3 idiomas (PT-BR, EN-US, ES-ES).
✅ Critérios de aceite validados
| # | Critério | Status |
|---|---|---|
| 1 | Página de entrega com upload de imagem (JPG/PNG/PDF) | ✅ |
| 2 | Upload de PSD (só download + preview obrigatório) | ✅ |
| 3 | Textarea de descrição do processo | ✅ |
| 4 | Checkbox 'Quero correção do Professor' | ✅ |
| 5 | Checkbox 'Deixar privado' | ✅ |
| 6 | Botão PUBLICAR NA GALERIA | ✅ |
| 7 | Fluxo de refazer exercício (allowResubmit) | ✅ |
| 8 | Build passa + deploy DEV funcional | ✅ |
📁 2. Arquivos criados/modificados
Criados
| Arquivo | Função |
|---|---|
src/app/(dashboard)/aluno/tarefas/[taskId]/enviar/page.tsx |
Página de upload + PUBLICAR NA GALERIA |
src/app/(dashboard)/aluno/tarefas/[taskId]/refazer/page.tsx |
Página de refazer exercício |
src/styles/gallery-upload.module.css |
Estilos (upload drag&drop, checkboxes, botão publicar) |
Modificados
| Arquivo | Mudança |
|---|---|
src/server/trpc/routers/student.ts |
+sub-router gallery (create, createFromSubmission, myPosts); detail retorna allowResubmit+attemptNumber |
src/app/(dashboard)/aluno/tarefas/[taskId]/page.tsx |
+botões "Publicar na Galeria" e "Refazer exercício" |
messages/{pt-BR,en-US,es-ES}.json |
+seção student.galleryUpload (39 chaves cada) |
🔌 3. Handoff para o próximo card (7f)
Procedures disponíveis
student.gallery.create/createFromSubmission— prontas para alimentar o feed (Card 7f)student.gallery.myPosts— pronto para aba "Meus Trabalhos" (Card 7f)- Posts são criados com
status=PENDING→ o feed (7f) deve filtrarstatus=PUBLISHED
O que o próximo card (7f) precisa fazer
- Página
/aluno/galeriacom feed principal (abas + filtros + PostCard) - Procedures
student.gallery.feed,toggleLike,comment,toggleSave,museum - Componentes PostCard, PostGrid, CommentThread, LikeButton, TeacherCorrectionBadge
📋 4. Checklist do Trello — status
Entregas (7/7): ✅ todos concluídos Especificação Técnica (implementados): ✅ procedimentos + páginas + upload + flags + refazer + i18n + build Validar com Cliente (0/5): 5 perguntas permanecem pendentes (limite de tentativas, descrição obrigatória, editar PENDING, excluir post, notificar aprovação)
🚀 5. Deploy DEV
- Build:
✓ Compiled successfully(local + VPS) - pm2 restart:
genioon-dev --update-env— online - Smoke test: Health 200, Login 307, Aluno 307, Tarefas 307, Doc 200
🎯 6. Próximo card
Card 7f — Mural da Turma (Feed + Curtidas + Comentários + Museu + Desafios)
O feed estilo Instagram onde os posts aprovados aparecem. Usa as procedures gallery.* criadas neste card.