Skip to content

REF-901-07: SolidAffiliate Integration

ADR: ADR-901 — IntegrationsEscopo: Hooks consumidos, AffiliateAdapter bridge, AffiliateService, API v1 endpoints, Entitlement AFL


0. Affiliate Domain Contract

SolidAffiliate é a fonte de verdade para dados de afiliados. middag-account não persiste entidade Affiliate própria — usa o AffiliateAdapter como projeção read-only das tabelas do SolidAffiliate.

Campos projetados via AffiliateAdapter (lidos, não persistidos):

CampoTipoFonte
affiliate_idintsolid_affiliate_affiliates.id
organization_idintResolvido via user_id → Organization
statusstringsolid_affiliate_affiliates.status (pending/approved/rejected)
referral_codestringsolid_affiliate_affiliates.referral_code
commission_ratedecimalsolid_affiliate_affiliates.commission_rate
total_earneddecimalCalculado de solid_affiliate_referrals

Invariante: middag-account NUNCA escreve nas tabelas do SolidAffiliate.

Único dado persistido pelo middag-account: Entitlement classe AFL criado via hook solid_affiliate/affiliate/approved (ver §5 abaixo).

Lifecycle de status: Determinado pelo SolidAffiliate. middag-account reage via hooks (§1) — não gerencia o lifecycle diretamente.


1. Hooks Consumidos

O SolidAffiliate é plugin WordPress de terceiros para o Programa de Parceiros. middag-account integra via WP hooks. SolidAffiliate é fonte de verdade para dados de afiliados.

HookQuandoAção no middag-account
solid_affiliate/referral/createdNova indicação registradaCaptura order_id, affiliate_id, commission
solid_affiliate/referral/status_changedStatus muda (pending→approved→paid)Atualiza dados de referral locais
solid_affiliate/affiliate/registeredNovo afiliado se registraLog para auditoria
solid_affiliate/affiliate/approvedAfiliado aprovadoCria Entitlement classe AFL (AFL-{YYYY}{MM}{SEQ:4d})
solid_affiliate/payout/completedPagamento processadoAtualiza histórico de payouts

2. AffiliateAdapter Bridge

Middag\Account\Integration\Affiliate\
  AffiliateAdapterInterface.php   — contrato
  SolidAffiliateAdapter.php       — implementação (lê tabelas do SolidAffiliate)

O adapter lê diretamente das tabelas do SolidAffiliate. CRITICO: não duplicar dados — tabelas do SolidAffiliate são fonte de verdade. Único dado persistido pelo middag-account é o Entitlement AFL.


3. AffiliateService

Middag\Account\Domain\Affiliate\AffiliateService:

MétodoRetorno
getAffiliateProfile($organizationId)Perfil: nome, email, status, link referral
getReferrals($organizationId, $filters)Lista de indicações com paginação
getCommissionSummary($organizationId)Totais: ganho, pendente, pago
getPayoutHistory($organizationId)Registros de pagamentos

4. API v1 Endpoints

EndpointMétodoDescrição
/middag-account/v1/affiliates/profileGETPerfil do afiliado
/middag-account/v1/affiliates/referralsGETLista de indicações (filtro por status)
/middag-account/v1/affiliates/commissionsGETResumo de comissões
/middag-account/v1/affiliates/payoutsGETHistórico de pagamentos
/middag-account/v1/affiliates/registerPOSTSolicitar registro como afiliado

5. Entitlement AFL

Cada afiliado aprovado recebe Entitlement classe AFL. Criado automaticamente pelo hook solid_affiliate/affiliate/approved. Vincula conta de afiliado ao sistema de Entitlement unificado (ADR-202).