Pular para o conteúdo principal

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

  1. Submissão existente — Evidência: app/Models/DeliverableSubmission.php:15
  2. API Key válida — Evidência: app/Http/Middleware/ApiKeyMiddleware.php:15
  3. Workflow Novu request-resubmission cadastrado — Evidência: app/Services/NotificationService.php:23

Fluxo principal

  1. App mobile envia DELETE /api/submissions/{id}?action=resend com API Key
    • Evidência: routes/api.php:23, app/Http/Controllers/Api/SubmissionController.php:413
  2. Controller verifica parâmetro action=resend
  3. SoftDelete da submissão (deleted_at preenchido)
    • Evidência: app/Models/DeliverableSubmission.php:14 (trait SoftDeletes)
  4. Remove arquivos físicos do storage (S3/local)
    • Evidência: app/Http/Controllers/Api/SubmissionController.php:413
  5. NotificationService::sendNotification() envia request-resubmission ao participante
    • Evidência: app/Services/NotificationService.php:23
  6. 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

  1. Soft delete: A submissão não é removida fisicamente — mantém deleted_at preenchido.
    • Evidência: database/migrations/2025_07_17_123646_add_deleted_at_to_deliverable_submissions_table.php:16
  2. 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
  3. Remoção de arquivos: Arquivos físicos são removidos do storage ao solicitar reenvio.
    • Evidência: app/Http/Controllers/Api/SubmissionController.php:413

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 — campo deleted_at preenchido (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.