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 IntegrationWebhook ou 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 OutcomeWebhooks para 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.