Plano de integração com o LMS Onion

TLDR: adicionar o Onion como mais uma plataforma de PlatformService, seguindo exatamente o padrão já existente de CBTRG e Apolo.

Não houve spec formal para esta integração — o plano nasceu direto da especificação da API do Onion. O contrato resultante está em ../reference/payments/onion_integration.md.

Fases

1. Configuração da plataforma

config/initializers/platform_integrations.rb — adicionar à lista PLATFORM_TARGETS:

ruby ["Onion", "onion"]

2. Módulo de comunicação HTTP

Criar app/models/onion.rb:

```ruby module Onion def webhook_send_payload(params) HTTParty.post( “#{base_url}checkout_notifications”, body: params.to_json, headers: { “Content-Type” => “application/json”, “Authorization” => “Bearer #{api_key}” } ) end

def base_url Rails.application.credentials.dig(:onion, :api_url) end

def api_key Rails.application.credentials.dig(:onion, :api_key) end end ```

3. Service de integração

Criar app/services/onion_service.rb, incluindo o módulo Onion e seguindo o padrão de app/services/cbtrg_service.rb e apolo_service.rb:

Método Responsabilidade
initialize(payment) Carrega payment, customer, checkout e organization
create_or_update(execute_now) Lógica de decisão a partir do status do pagamento
grant_user_access Libera o acesso quando o pagamento é confirmado
remove_user_access Bloqueia o acesso em overdue/refunded
create_webhook(params) Log do webhook enviado

4. Roteamento no PlatformService

app/services/platform_service.rb — no método process:

```ruby process_onion if target_ead == :onion

def process_onion OnionService.new(@payment).create_or_update(@execute_now) end ```

5. Credenciais (passo manual)

Adicionar ao config/credentials.yml.enc:

yaml onion: api_url: "https://api.onion.com/" api_key: "seu_token_aqui"

6. Testes

Arquivo Cobertura
spec/models/onion_spec.rb Métodos do módulo Onion, com HTTParty mockado
spec/services/onion_service_spec.rb Fluxo de create_or_update, grant_user_access e remove_user_access

Ordem de implementação

  1. config/initializers/platform_integrations.rb — adicionar a opção
  2. app/models/onion.rb — módulo HTTP
  3. app/services/onion_service.rb — service principal
  4. app/services/platform_service.rb — roteamento
  5. spec/models/onion_spec.rb — testes do módulo
  6. spec/services/onion_service_spec.rb — testes do service

Verificação

  • make lint — verificar estilo de código
  • make t — rodar a suíte de testes completa
  • Criar um checkout com integration: "onion" e percorrer o fluxo de pagamento ponta a ponta

Especificação da API Onion

  • Autenticação: token via header (Authorization: Bearer xxx)
  • Endpoint: /checkout_notifications
  • Funcionalidade: LMS — liberar ou bloquear acesso a cursos conforme o status do pagamento

json { "status": "enabled", "email": "aluno@email.com", "name": "Nome do Aluno", "doc_number": "12345678900", "phone_number": "11999999999", "token": "token_de_verificacao", "transaction": "ref_pagamento_abc123", "expires_at": "2026-12-31 23:59:59" }

Campo Descrição
status "enabled" libera o acesso, "disabled" bloqueia
email Email do aluno
name Nome completo do aluno
doc_number CPF/CNPJ do aluno
phone_number Telefone do aluno
token Token de verificação
transaction Referência única do pagamento no checkout
expires_at Data de expiração do acesso