Feature: Cursos AoVivo
Introdução ao documento
Este documento descreve a funcionalidade de gestão e visualização de cursos ao vivo, incluindo estatísticas de inscrições e ciclos.
Versionamento
- Versão do documento: 1.0.0
- Última atualização: 2026-03-09
- Responsável: Marivaldo Vinicius
Referencial teórico
Visão geral
A feature de cursos AoVivo permite visualizar e gerenciar dados de cursos ao vivo, incluindo ciclos, inscrições, estatísticas e filtros. Sistema integra com duas fontes: WordPress API (via service) e AoVivo API (direta), com cache estratégico para otimizar performance.
Atores envolvidos
- Administrador: Visualiza estatísticas e gerencia cursos ao vivo
- Sistema: Integra com WordPress API e AoVivo API
- Frontend React: Consome APIs e exibe dados em dashboards e tabelas
Pré-condições
- WordPress API configurada (
WORDPRESS_API_URL,WORDPRESS_API_TOKEN) - AoVivo API configurada (
AO_VIVO_API,AO_VIVO_TOKEN) - Cache Laravel configurado e operacional
- Permissões adequadas para visualização
Fluxo principal
Visualização de Estatísticas de Inscrições
-
Seleção de ciclo
- Administrador seleciona ciclo no dashboard AoVivo
- Frontend envia requisição para
/api/v1/ao-vivo/stats/{cycle_id} - Parâmetros opcionais:
page,per_page(default: 1, 10000)
-
Busca de dados
AoVivoControllerutilizaEnrollmentStatsService- Service verifica cache (TTL: 1 minuto)
- Se cache não existe ou expirou, chama WordPress API
- Autenticação via Svc token
-
Processamento e cache
- Dados são recebidos do WordPress API
- Armazenados no cache com chave baseada em parâmetros
- Retornados ao frontend em formato JSON
-
Visualização
- Frontend recebe dados paginados
- Exibe estatísticas em tabelas e gráficos
- Permite navegação entre páginas
Listagem de Ciclos e Cursos
-
Listar ciclos disponíveis
- Frontend consome
/api/v1/ao-vivo/cycles - Service busca do WordPress API com cache de 1 minuto
- Retorna lista de ciclos em captação
- Frontend consome
-
Listar cursos disponíveis
- Frontend consome
/api/v1/ao-vivo/courses - Service busca do WordPress API com cache de 4 horas
- Retorna lista de cursos com informações básicas
- Frontend consome
-
Listar ciclos por curso
- Frontend consome
/api/v1/ao-vivo/cycles/{course_id} - Service busca ciclos específicos do curso
- Cache de 4 horas (dados menos dinâmicos)
- Frontend consome
Integração Direta com AoVivo API
-
Endpoints de integração
- Endpoints
/api/v1/dhedalos/v1/live/*chamam AoVivo API diretamente - Autenticação via Bearer token
- Cache de 30 segundos (dados muito dinâmicos)
- Endpoints
-
Dados disponíveis
- Ciclos:
/dhedalos/v1/live/cycles - Inscrições por ciclo:
/dhedalos/v1/live/enrolls-by-cycle - Inscrições por produto:
/dhedalos/v1/live/enrolls-by-product - Inscrições gerais:
/dhedalos/v1/live/enrollments
- Ciclos:
Fluxos alternativos
Estatísticas com turno
- Endpoint
/api/v1/ao-vivo/shift-stats/{cycle_id}retorna estatísticas incluindo informação de turno - Mesmo fluxo de cache e integração, mas com endpoint diferente no WordPress API
Falha na integração WordPress
- Se WordPress API retorna erro, sistema retorna
500com mensagem de erro - Frontend exibe mensagem de erro ao usuário
- Cache não é atualizado em caso de erro
Falha na integração AoVivo
- Se AoVivo API falha, erro é retornado na resposta
- Cache não é atualizado
- Frontend trata erro adequadamente
Cache expirado
- Se cache expirou, nova requisição é feita automaticamente
- Transparente para o usuário
- Latência pode aumentar se API externa estiver lenta
Regras de negócio
-
TTL variável por tipo de dado:
- Estatísticas dinâmicas: 1 minuto
- Cursos e ciclos: 4 horas (dados menos frequentes)
- Integração AoVivo direta: 30 segundos
-
Paginação obrigatória: Estatísticas sempre retornam paginadas (default: 10000 itens por página)
-
Autenticação diferenciada:
- WordPress API: Svc token (
WORDPRESS_API_TOKEN) - AoVivo API: Bearer token (
AO_VIVO_TOKEN)
- WordPress API: Svc token (
-
Idempotência: Mesmos parâmetros sempre retornam mesmos dados (dentro do TTL)
-
Fallback: Não há fallback se APIs externas falharem
Estados possíveis
- Disponível: Dados disponíveis no cache ou API
- Carregando: Requisição à API externa em andamento
- Erro: Falha na integração com API externa
- Cache expirado: Cache existe mas expirou, nova requisição necessária
Endpoints envolvidos
WordPress API (via Service)
- GET
/api/v1/ao-vivo/cycles- Lista ciclos disponíveis - GET
/api/v1/ao-vivo/courses- Lista cursos disponíveis - GET
/api/v1/ao-vivo/cycles/{course_id}- Lista ciclos por curso - GET
/api/v1/ao-vivo/stats/{cycle_id}- Estatísticas de inscrições por ciclo - GET
/api/v1/ao-vivo/shift-stats/{cycle_id}- Estatísticas com turno
AoVivo API (direta)
- GET
/api/v1/dhedalos/v1/live/cycles- Ciclos do AoVivo - GET
/api/v1/dhedalos/v1/live/enrolls-by-cycle- Inscrições por ciclo - GET
/api/v1/dhedalos/v1/live/enrolls-by-product- Inscrições por produto - GET
/api/v1/dhedalos/v1/live/enrollments- Lista de inscrições
Dados afetados
-
Cache Laravel: Múltiplas chaves para diferentes tipos de dados
enrollment-stats:page_{page}:per_page_{perPage}:cycle_id_{cycleId}cycles-shiftavailable-coursesavailable-cycles:course_id_{courseId}- Chaves do AoVivo:
cycles,enrolls-by-cycle,enrollments
-
Nenhuma tabela local: Dados não são persistidos, apenas cacheados
Integrações externas
-
WordPress API: Backend WordPress para dados de enrollment
- Autenticação: Svc token
- Endpoints:
/export/enrollment-stats,/live/enrollments-stats,/live/cycles,/export/courses,/export/cycles-stats
-
AoVivo API: API externa para dados de cursos ao vivo
- Autenticação: Bearer token
- Endpoints:
/api/dhedalos/v1/live/*
Services relacionados
- EnrollmentStatsService: Service principal para integração com WordPress API
- Métodos:
getEnrollmentStats(),getEnrollmentStatsWithShift(),getCycles(),getAvailableCourses(),getAvailableCyclesByCourse()
- Métodos: