Integração Apolo V2 — integração por organização
TLDR: inverter a dependência da integração com o EAD Apolo — cadastrar a integração na organização e selecionar os checkouts envolvidos, em vez de cada checkout carregar um relacionamento com o Apolo.
Contexto
Hoje cada checkout tem um relacionamento próprio com o Apolo. Isso espalha a configuração e impede reaproveitamento. A estrutura genérica — integração cadastrada na organização, com os checkouts selecionados — inverte essa dependência.
Ao concluir o novo desenvolvimento será preciso migrar as turmas dos checkouts existentes para integrações cadastradas do tipo Apolo, ou Webhooks (a decidir).
Objetivos
- Cadastrar a integração Apolo no nível da organização, com seleção dos checkouts envolvidos.
- Decidir se as integrações são feitas aprimorando o
IntegrationWebhookou como integração customizada só para o Apolo. - Adicionar a integração ao fluxo do EventsHub.
Fora de escopo
— (não registrado na spec original)
Mudanças
EventsHub
Em app/use_cases/events_hub/events_router/organization/router_switch.rb, dentro de :payments:
ruby
when :payments
[
EventsHub::EventsRouter::Organization::EventOutcomeWebhooksJob,
CheckoutIntegrations::Lms::Apolo::EventDispatcherJob # linha nova a criar
]
Modelo CheckoutIntegrationApolo
ruby
belongs_to :organization
has_many :integration_checkouts, as: :integratable, dependent: :destroy
has_many :checkouts, through: :integration_checkouts
has_many :checkout_classrooms
| Campo | Nome | Descrição |
|---|---|---|
organization_id |
ID da organização | A organização associada à integração |
Job CheckoutIntegrations::Lms::Apolo::EventDispatcherJob
- Agendado imediatamente, chamando um Flow de processamento do Apolo.
- Dentro do Flow, identificar a necessidade de reagendar o job para execução posterior no caso de pagamento em atraso.
- Enviar imediatamente quando não for em atraso.
- Possivelmente reusar a estrutura dos
OutcomeWebhookspara salvar o log — provavelmente a última parte do flow.
Autenticação
Não é necessária autenticação para esta funcionalidade.
ActiveAdmin
Não detalhado na spec original.
Como verificar
— (não registrado na spec original)
Documentação
Não implementado. Não existe app/models/checkout_integration_apolo.rb. A integração Apolo continua no formato V1, descrito em ../reference/payments/payment_integration_flow.md, via app/services/checkout_integrations/lms/apolo/apolo_service.rb.