Feature: Solicitação de Reenvio
Introdução ao documento
Documenta o fluxo de solicitação de reenvio de submissão pelo facilitador.
Versionamento
- Versão do documento: 1.0.0
- Última atualização: 2026-03-04
- Responsável: Time Dhedalos
Referencial teórico
Visão geral
O facilitador pode solicitar que o participante reenvie uma submissão. O sistema soft-deleta a submissão existente, remove os arquivos físicos do storage e notifica o participante para reenviar.
Atores
- Facilitador (professor) — solicita reenvio
- Participante (aluno) — recebe notificação para reenviar
- Sistema (Novu) — envia notificação
request-resubmission
Pré-condições
- Submissão existente — Evidência:
app/Models/DeliverableSubmission.php:15 - API Key válida — Evidência:
app/Http/Middleware/ApiKeyMiddleware.php:15 - Workflow Novu
request-resubmissioncadastrado — Evidência:app/Services/NotificationService.php:23
Fluxo principal
- App mobile envia
DELETE /api/submissions/{id}?action=resendcom API Key- Evidência:
routes/api.php:23,app/Http/Controllers/Api/SubmissionController.php:413
- Evidência:
- Controller verifica parâmetro
action=resend - SoftDelete da submissão (
deleted_atpreenchido)- Evidência:
app/Models/DeliverableSubmission.php:14(trait SoftDeletes)
- Evidência:
- Remove arquivos físicos do storage (S3/local)
- Evidência:
app/Http/Controllers/Api/SubmissionController.php:413
- Evidência:
NotificationService::sendNotification()enviarequest-resubmissionao participante- Evidência:
app/Services/NotificationService.php:23
- Evidência:
- Retorna HTTP 200 com confirmação
Fluxos alternativos
- Submissão não encontrada: Retorna HTTP 404.
- Sem action=resend: Executa exclusão permanente lógica sem notificação de reenvio.
- Falha Novu: Exclusão persiste mesmo que notificação falhe.
Regras de negócio
- Soft delete: A submissão não é removida fisicamente — mantém
deleted_atpreenchido.- Evidência:
database/migrations/2025_07_17_123646_add_deleted_at_to_deliverable_submissions_table.php:16
- Evidência:
- Unique constraint considera deleted_at: O participante pode reenviar pois a constraint unique inclui
deleted_at.- Evidência:
database/migrations/2025_07_28_132021_add_unique_submission_constraint_to_deliverable_submissions.php:16
- Evidência:
- Remoção de arquivos: Arquivos físicos são removidos do storage ao solicitar reenvio.
- Evidência:
app/Http/Controllers/Api/SubmissionController.php:413
- Evidência:
Estados possíveis
submitted/submitted_external/evaluated→ (soft deleted) → participante pode criar nova submissão
Endpoints envolvidos
DELETE /api/submissions/{id}— excluir/solicitar reenvio (openapi.yaml)- Evidência:
routes/api.php:23
Dados impactados
deliverable_submissions— campodeleted_atpreenchido (model.md)submission_files— arquivos removidos via cascade ou lógica explícita (model.md)- Storage S3/local — arquivos físicos removidos
Pendências
- ⚠️ PENDÊNCIA: Documentar se existe limite de reenvios por submissão.
- ⚠️ PENDÊNCIA: Verificar comportamento quando DELETE é chamado sem
action=resend.