Dhedalos - Dashboard
Introdução ao documento
Este README descreve o contexto do repositório, instruções operacionais e referências para evolução técnica.
Versionamento
- Versão do documento: 1.0.0
- Última atualização: 2026-03-09
- Responsável: Marivaldo Vinicius
Referencial teórico
Introdução
Dashboard administrativo da Dhedalos (agência de cursos) para gestão de inscrições, agendamentos, NPS, análise de sentimento e integração com sistema AoVivo.
Mapa rápido do repositório
Stack
- Linguagem/Framework: PHP 8.2+, Laravel 11.9+ - evidência:
composer.json:8-19 - Frontend: React 18.3+, TypeScript 5.5+, Vite 5.3+ - evidência:
package.json:32-56 - Admin Panel: Backpack for Laravel 6.7+ - evidência:
composer.json:9-13 - Banco de dados: MySQL 8.0, Redshift (read-only) - evidência:
config/database.php:47-90 - Cache: Laravel Cache (Redis/Memcached) - evidência:
config/cache.php - Autenticação: Laravel Sanctum 4.0+ - evidência:
composer.json:21,routes/api.php:68 - API Docs: L5-Swagger 8.6+ - evidência:
composer.json:14 - Testes: Pest PHP 3.8+ - evidência:
composer.json:33-34 - Infra/Deploy: Docker Compose (dev), Kubernetes/Helm (prod) - evidência:
docker-compose.yml,helm/ - Integrações: Google Gemini API (sentiment analysis), AoVivo API - evidência:
config/gemini.php:17,routes/api.php:44
Como rodar local
Pré-requisitos:
- Docker e Docker Compose
- PHP >= 8.2 (se rodar sem Docker)
- Composer >= 2.7.2
- Node >= 18
- MySQL >= 8.0.32
Comandos:
# start
docker compose up
# testes
docker compose exec laravel php artisan test
docker compose exec laravel ./vendor/bin/pest
# build (frontend)
npm run build
# ou via docker
docker compose exec vite npm run build
Variáveis de ambiente
| Variável | Obrigatória | Exemplo | Origem/Evidência |
|---|---|---|---|
APP_KEY | sim | base64:... | helm/templates/secret.yaml:12 |
APP_NAME | sim | Dhedalos Dashboard | config/app.php:16 |
APP_ENV | sim | local/production | config/app.php:29 |
APP_DEBUG | sim | true/false | config/app.php:42 |
APP_URL | sim | http://localhost:8000 | config/app.php:55 |
DB_CONNECTION | sim | mysql | config/database.php:19 |
DB_HOST | sim | 127.0.0.1 | config/database.php:48 |
DB_PORT | sim | 3306 | config/database.php:49 |
DB_DATABASE | sim | laravel | config/database.php:50 |
DB_USERNAME | sim | root | config/database.php:51 |
DB_PASSWORD | sim | password | config/database.php:52 |
REDSHIFT_DB_HOST | não | redshift-cluster.amazonaws.com | config/database.php:86 |
REDSHIFT_DB_DATABASE | não | warehouse | config/database.php:88 |
REDSHIFT_DB_USERNAME | não | user | config/database.php:89 |
REDSHIFT_DB_PASSWORD | não | password | config/database.php:90 |
GEMINI_API_KEY | sim | AIza... | config/gemini.php:17 |
GEMINI_BASE_URL | não | https://generativelanguage.googleapis.com | config/gemini.php:27 |
AO_VIVO_TOKEN | sim | Bearer token | app/Http/Controllers/Api/v1/AoVivoIntegracaoController.php:44 |
AO_VIVO_API | sim | https://api.aovivo.com | app/Http/Controllers/Api/v1/AoVivoIntegracaoController.php:46 |
REDIS_HOST | não | 127.0.0.1 | helm/templates/secret.yaml:25 |
CACHE_DRIVER | não | redis/file | helm/templates/secret.yaml:67 |
QUEUE_CONNECTION | não | redis/sync | helm/templates/secret.yaml:75 |
Contexto C4 L1
Atores
- Administradores: Usuários que acessam o painel administrativo Backpack (
/admin) - Sistemas externos: Integrações via API REST (
/api/v1/*)
Sistema em foco
Dhedalos Dashboard - Sistema de gestão administrativa para agência de cursos que fornece:
- Dashboard de métricas e KPIs
- Gestão de inscrições e agendamentos
- Análise de NPS por produto (UP Marketing, UP Finanças, Decola MEI, Mulheres em Foco)
- Análise de sentimento via Google Gemini
- Integração com sistema AoVivo para cursos ao vivo
- Painel administrativo via Backpack for Laravel
Integrações externas
- Google Gemini API: Análise de sentimento de textos - evidência:
config/gemini.php:17,app/Http/Controllers/Api/v1/SentimentController.php - AoVivo API: Integração para dados de cursos ao vivo - evidência:
app/Http/Controllers/Api/v1/AoVivoIntegracaoController.php:44-46 - Redshift: Data warehouse para consultas analíticas - evidência:
config/database.php:86-90 - AWS S3: Armazenamento de arquivos (quando configurado) - evidência:
helm/templates/secret.yaml:35-38
Repos relacionados
- Sistema AoVivo (fonte de dados de cursos ao vivo)
- Backend WordPress (possível integração futura)
Práticas padronizadas no código e UI
- Storybook: Documentação e validação visual de componentes React
- PHPDoc: Contratos, tipos e comentários estruturados em PHP
- OpenAPI/Swagger: Documentação de API via L5-Swagger - Especificação
- Mindmap: Visão de componentização/domínio - Documentação
Fluxo de manutenção da documentação
Documentação detalhada
Visão Geral
- Overview - Inventário técnico do repositório
- Arquitetura C4 - Componentes e fluxos críticos
- Mindmap - Domínios e módulos do sistema
API e Dados
- Especificação OpenAPI - Documentação completa da API
- Exemplos de API - Request/Response examples
- Modelo de Dados - Entidades e relacionamentos
Operação
- Runbook - Procedimentos operacionais e troubleshooting
- Observabilidade - Logs, healthchecks e métricas
Testes
- Testes E2E com Cypress - Documentação completa dos testes end-to-end
Decisões e Features
Pré-Requisitos
- PHP >= 8.2
- Composer - version 2.7.2
- MySQL - 8.0.32
- Laravel >= 11.0
- Node >= 18
Instalação (Desenvolvimento)
-
Copie o arquivo
.env.examplepara.enve configure as variáveis de ambiente. -
Inicie o docker com o comando:
docker compose up -
Gere uma nova chave de aplicativo:
docker compose exec laravel php artisan key:generate -
Limpe o cache de configurações:
docker compose exec laravel php artisan config:clear -
Execute as migrações:
docker compose exec laravel php artisan migrate --seed -
Crie um novo usuario via backpack
docker compose exec laravel php artisan backpack:user -
Acesse a aplicação em:
http://localhost:8000.
Swagger
Para gerar a documentação basta rodar o comando
docker compose exec laravel php artisan l5-swagger:generate
A documentação estará na url http://localhost:8080/api/documentation#/default
Gerar usuário admin
Para gerar um usuário admin basta executar o comando
php artisan create:admin-user
Testes
O projeto utiliza duas ferramentas de teste:
- Pest PHP para testes unitários e funcionais do backend
- Cypress para testes end-to-end (E2E) da interface administrativa
Testes Backend (Pest PHP)
# Executar todos os testes com Pest
docker compose exec laravel ./vendor/bin/pest
# Executar via Artisan (compatível com Pest)
docker compose exec laravel php artisan test
# Executar cobertura via Artisan (atualiza pagina HTML em storage/coverage-html)
docker compose exec laravel php artisan test --coverage
# Executar testes específicos
docker compose exec laravel php artisan test --filter="AoVivoControllerTest"
# Executar com cobertura total de app/ (100%)
docker compose exec laravel ./vendor/bin/pest --coverage --min=100 --coverage-filter=app
# Executar apenas testes unitários
docker compose exec laravel ./vendor/bin/pest tests/Unit
# Executar apenas testes de feature
docker compose exec laravel ./vendor/bin/pest tests/Feature
Testes E2E (Cypress)
Pré-requisitos:
- Aplicação Laravel rodando em
http://localhost:8000 - Dependências Node instaladas (
npm install) - Usuário de teste criado no banco de dados
# Abrir Cypress Test Runner (interface gráfica)
npm run cypress:open
# Executar testes em modo headless
npm run cypress:run
Criar usuário de teste:
# Via Tinker
docker compose exec laravel php artisan tinker
# Criar usuário com email e senha conhecidos
Variáveis de ambiente (opcionais):
export CYPRESS_BASE_URL=http://localhost:8000
export CYPRESS_USER_EMAIL=test@example.com
export CYPRESS_USER_PASSWORD=password
Documentação completa dos testes Cypress: docs/tests/cypress.md
Testes Automatizados
O projeto está configurado para executar testes automaticamente:
CI/CD Pipeline (GitHub Actions):
- Testes Pest rodam automaticamente em cada
pushepull request - Jobs de deploy só executam depois dos testes passarem
- Validação de cobertura mínima com
--min=100
Pre-commit Hooks (Opcional):
# Configurar hooks locais para rodar testes antes do commit
./setup-hooks.sh
# Agora os testes rodam automaticamente antes de cada commit
git commit -m "minha alteração"
# Para pular os testes temporariamente (não recomendado)
git commit --no-verify -m "commit sem testes"
Comandos utilitários
# Menu interativo de testes
./test-runner.sh
# Scripts Composer
composer test
composer test:pest
composer test:coverage
Status dos testes
- 143 testes passando
- 315 assertions validadas
- 100% de cobertura real em
app/(--coverage-filter=app)
Para detalhes completos, consulte: TESTING.md
Governança automática
- GitHub Action obrigatória:
.github/workflows/docs-governance.yml(a ser criada). - 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 Swagger disponível em:
http://localhost:8080/api/documentation#/default(após gerar comphp artisan l5-swagger:generate).