Feature: Gestão de Arquivos Modelo
Introdução ao documento
Documenta o fluxo de CRUD de arquivos modelo (templates) de atividades.
Versionamento
- Versão do documento: 1.0.0
- Última atualização: 2026-03-04
- Responsável: Time Dhedalos
Referencial teórico
Visão geral
Arquivos modelo (templates) são associados a combinações de curso/atividade/ciclo/turma. São gerenciados via API (sistema externo) e via painel admin (Backpack). Servem como referência para os participantes na elaboração de suas submissões.
Atores
- Sistema externo — cria/atualiza templates via API
- Administrador — gerencia templates via painel Backpack
- Participante — consome templates (leitura)
Pré-condições
- API Key válida para operações via API — Evidência:
app/Http/Middleware/ApiKeyMiddleware.php:15 - Autenticação admin para operações via Backpack — Evidência:
app/Http/Middleware/CheckIfAdmin.php
Fluxo principal (via API)
- Sistema envia
POST /api/activity-template-filescom API Key + dados + arquivo- Evidência:
routes/api.php:27,app/Http/Controllers/Api/ActivityTemplateFileController.php:50
- Evidência:
- Controller valida dados via
ActivityTemplateFileRequest- Evidência:
app/Http/Requests/ActivityTemplateFileRequest.php
- Evidência:
TemplateFileService::replaceFile()faz upload do arquivo para S3/local na pastaactivity-templates/- Evidência:
app/Services/TemplateFileService.php:23
- Evidência:
- Registro criado em
activity_template_files- Evidência:
app/Models/ActivityTemplateFile.php:18
- Evidência:
- Retorna JSON do template criado (HTTP 201)
Fluxos alternativos
- Filtro por curso/atividade:
GET /api/activity-template-files/filterfiltra templates por parâmetros.- Evidência:
routes/api.php:25,app/Http/Controllers/Api/ActivityTemplateFileController.php:27
- Evidência:
- Visualização individual:
GET /api/activity-template-files/{id}retorna template específico.- Evidência:
routes/api.php:26,app/Http/Controllers/Api/ActivityTemplateFileController.php:21
- Evidência:
- Atualização:
PUT /api/activity-template-files/{id}atualiza dados e/ou arquivo.- Evidência:
routes/api.php:28,app/Http/Controllers/Api/ActivityTemplateFileController.php:89
- Evidência:
- Exclusão:
DELETE /api/activity-template-files/{id}soft-deleta o template.- Evidência:
routes/api.php:29,app/Http/Controllers/Api/ActivityTemplateFileController.php:118
- Evidência:
- CRUD Admin: Via Backpack em
/admin/activity-template-file.- Evidência:
routes/backpack/custom.php:32,app/Http/Controllers/Admin/ActivityTemplateFileCrudController.php
- Evidência:
Regras de negócio
- Unique constraint: Combinação
(course_id, activity_id, cycle_id, class_id, original_name)é única.- Evidência:
database/migrations/2025_12_15_201931_create_activity_template_files.php:30
- Evidência:
- Soft delete: Templates são soft-deletados, preservando histórico.
- Evidência:
app/Models/ActivityTemplateFile.php:14(trait SoftDeletes)
- Evidência:
- Cleanup automático: Ao deletar model, arquivo físico é removido automaticamente via
booted().- Evidência:
app/Models/ActivityTemplateFile.php:54
- Evidência:
Estados possíveis
- Ativo (sem
deleted_at) - Soft-deletado (
deleted_atpreenchido)
Endpoints envolvidos
GET /api/activity-template-files/filter— filtrar templates (openapi.yaml)GET /api/activity-template-files/{id}— visualizar templatePOST /api/activity-template-files— criar templatePUT /api/activity-template-files/{id}— atualizar templateDELETE /api/activity-template-files/{id}— excluir template- Evidência:
routes/api.php:25-29
Dados impactados
activity_template_files— registros de templates (model.md)- Storage S3/local — arquivos na pasta
activity-templates/
Pendências
- ⚠️ PENDÊNCIA: Documentar MIME types permitidos para templates (se diferem dos de submissão).
- ⚠️ PENDÊNCIA: Verificar se download de template é público ou requer autenticação.