activity-delivery-api
Introdução ao documento
Este README descreve o contexto do repositório activity-delivery-api, instruções operacionais e referências para evolução técnica.
Versionamento
- Versão do documento: 1.0.0
- Última atualização: 2026-03-04
- Responsável: Time Dhedalos
Referencial teórico
Introdução
Back-end do módulo Atividades Entregáveis da plataforma Dhedalos. Gerencia o ciclo de vida de submissões de atividades acadêmicas (entrega, avaliação, reenvio) e notificações associadas, expondo uma API REST consumida pelo aplicativo mobile e pelo painel administrativo (Backpack).
Mapa rápido do repositório
Stack
- Linguagem/framework: PHP 8.2+ / Laravel 12
- Servidor HTTP: FrankenPHP via Laravel Octane
- Admin: Laravel Backpack 6.8
- Banco: MySQL 8.0 (dev) / PostgreSQL (produção)
- Cache/Session: Redis 7 — fallback: database
- Fila: Database driver (queue)
- Storage: AWS S3 / local
- Auth API: API Key + JWT (firebase/php-jwt)
- Auth Admin: Session (Fortify)
- Notificações: Novu (HTTP API)
- Docs API: L5-Swagger (OpenAPI)
- Testes: Pest PHP 3.8
- Monitoramento: Laravel Telescope, Laravel Pulse
- CI/CD: GitHub Actions
- Infra: Docker, Helm, Kubernetes (OKE)
Como rodar local
Pré-requisitos:
- Docker e Docker Compose
- Node.js / npm (na máquina host)
Comandos:
# 1. Instalar dependências do host
npm install
# 2. Copiar variáveis de ambiente
cp .env.example .env
# 3. Subir containers
docker-compose up --build
# 4. Executar migrations e seeds
docker-compose exec laravel php artisan migrate --seed
# 5. Gerar chave da aplicação
docker-compose exec laravel php artisan key:generate
# 6. Criar link de storage
docker-compose exec laravel php artisan storage:link
# 7. Gerar documentação Swagger
docker-compose exec laravel php artisan l5-swagger:generate
- Servidor: http://localhost:8000
- Swagger: http://localhost:8000/api/documentation
- Mailhog: http://localhost:8025
- MySQL host:
localhost:13306
Usuário default
- Email:
root@root.com - Senha:
root - Role:
admin - Criado automaticamente pelo
UserSeederem ambiente local.
Testes
# Todos os testes
docker-compose exec laravel php artisan test
# Teste específico
docker-compose exec laravel php artisan test --filter="ActivityTemplateFileControllerTest"
# Com cobertura
docker-compose exec laravel php artisan test --coverage
# Apenas unitários
docker-compose exec laravel php artisan test tests/Unit/
# Apenas feature
docker-compose exec laravel php artisan test tests/Feature/
- 140 testes passando, 375 assertions
- Cobertura: endpoints de API, autenticação, modelos, controllers, services, middleware, providers
- Para detalhes completos: TESTING.md
Lint
docker compose exec laravel vendor/bin/phpinsights -v --config-path='config/insights.php' --fix
Gerar API Key
docker-compose exec laravel php artisan api:key:generate --description="Descrição da chave"
Variáveis de ambiente
| Variável | Obrigatória | Exemplo | Origem/Evidência |
|---|---|---|---|
APP_NAME | sim | Laravel | .env.example:1 |
APP_ENV | sim | local | .env.example:2 |
APP_KEY | sim | (gerada via key:generate) | .env.example:3 |
APP_DEBUG | sim | true | .env.example:4 |
APP_URL | sim | http://localhost:8000 | .env.example:5 |
DB_CONNECTION | sim | mysql | .env.example:22 |
DB_HOST | sim | mysql | .env.example:23 |
DB_PORT | sim | 3306 | .env.example:24 |
DB_DATABASE | sim | laravel | .env.example:25 |
DB_USERNAME | sim | laravel | .env.example:26 |
DB_PASSWORD | sim | *** | .env.example:27 |
FILESYSTEM_DISK | sim | local | .env.example:36 |
QUEUE_CONNECTION | sim | database | .env.example:37 |
REDIS_HOST | não | redis | .env.example:44 |
REDIS_PORT | não | 6379 | .env.example:46 |
AWS_ACCESS_KEY_ID | prod | (secret) | .env.example:60 |
AWS_SECRET_ACCESS_KEY | prod | (secret) | .env.example:61 |
AWS_DEFAULT_REGION | prod | us-east-1 | .env.example:62 |
AWS_BUCKET | prod | (bucket name) | .env.example:63 |
L5_SWAGGER_GENERATE_ALWAYS | não | true | .env.example:67 |
JWT_SECRET | sim | (secret) | app/Http/Controllers/Api/SubmissionController.php, app/Http/Middleware/JwtAuthenticate.php |
NOVU_URL | sim | https://api.novu.co/v1/events/trigger | app/Services/NotificationService.php |
NOVU_SECRET_KEY | sim | (secret) | app/Services/NotificationService.php, bootstrap/providers.php |
⚠️ PENDÊNCIA: As variáveis
JWT_SECRET,NOVU_URLeNOVU_SECRET_KEYnão constam no.env.example. Devem ser adicionadas ao arquivo para garantir rastreabilidade.
Contexto C4 L1
Atores
- Participante (aluno) — submete atividades via app mobile
- Facilitador (professor) — avalia submissões via app mobile ou painel admin
- Administrador — gerencia usuários, permissões e configurações via Backpack
Sistema em foco
- activity-delivery-api — API REST que gerencia o ciclo de vida de submissões de atividades entregáveis (criação, avaliação, reenvio, notificação)
Integrações externas
- Novu — serviço de notificações (e-mail/push) — Evidência:
app/Services/NotificationService.php:23 - AWS S3 — armazenamento de arquivos de submissões e templates — Evidência:
config/filesystems.php,.env.example:60-64 - App Mobile Dhedalos — consome a API via API Key + JWT — Evidência:
routes/api.php:14-34
Repos relacionados
Práticas padronizadas no código e UI
- PHPDoc para contratos, tipos e comentários estruturados em PHP — Evidência:
app/Http/Controllers/Docs/OpenApi.php. - L5-Swagger + anotações OpenAPI para documentação de API.
- Pest PHP para cobertura de testes automatizados.
- Laravel Backpack para painéis CRUD administrativos.
- Spatie Permission para controle de acesso baseado em roles/permissions.
Fluxo de manutenção da documentação
Documentação detalhada
Governança automática
- GitHub Action obrigatória:
.github/workflows/docs-governance.yml. - A Action valida presença dos arquivos e seções obrigatórias de documentação.
Visualização da OpenAPI
- Abra
docs/api/openapi.yamlcom extensão OpenAPI/Swagger no VS Code (ex.:42Crunch OpenAPI Editor). - Use o preview da extensão para revisar rotas, schemas e erros antes do PR.
- Documentação interativa via Swagger UI: http://localhost:8000/api/documentation.
Pendências
- ⚠️ PENDÊNCIA: Variáveis
JWT_SECRET,NOVU_URLeNOVU_SECRET_KEYausentes do.env.example. - ⚠️ PENDÊNCIA: Documentar URLs dos ambientes de staging/produção quando disponíveis.
- ⚠️ PENDÊNCIA: Configurar checklist de DoD para PRs com impacto em documentação.