Arquitetura de Processamento
Entenda como o Rafobase processa webhooks, cron jobs e tarefas assíncronas.
Arquitetura de Processamento
O Rafobase usa uma arquitetura baseada em filas (queues) e cron jobs para processar operações de forma assíncrona e confiável.
Filas de Processamento
Webhooks e operações pesadas são processados de forma assíncrona via filas:
| Fila | Finalidade |
|---|---|
rafobase-queue | Processamento de webhooks (Guru, Yampi, Instagram) |
rafobase-sync-queue | Sincronização de cupons e campanhas |
rafobase-outbound-webhooks | Entrega de webhooks outbound (custom, Discord, Klaviyo) |
rafobase-import-queue | Importação bulk de perfis do Klaviyo |
rafobase-social-queue | Sincronização de social listening (Instagram/Apify) |
Fluxo de Webhook
Quando uma plataforma (Guru/Yampi) envia um webhook:
- O endpoint recebe o payload e salva em
webhookLogs(status:pending) - A mensagem é enfileirada para processamento assíncrono
- O consumer processa: valida cupom, cria referral, credita wallet
- O log é atualizado para
processedoufailed
Webhooks são processados de forma assíncrona. O endpoint retorna 200 OK imediatamente para
evitar timeouts da plataforma de checkout.
Cron Jobs
Jobs agendados que executam diariamente via Cloudflare Workers Cron:
Liberação de Saldo
Aprova referrals cujo período de garantia expirou e cria transações na wallet:
- Query: referrals com
status = pendingewarrantyEndsAt <= agora - Ação: Muda status para
approved, cria wallet transaction com statusavailable - Frequência: Diária
Limpeza de Transações Travadas
Remove transações stuck em processing por mais de 24 horas:
- Query: wallet transactions com
status = processingecreatedAt < 24h atrás - Ação: Marca como
cancellede reverte o saldo - Frequência: Diária
Reconciliação de Cupons
Re-sincroniza cupons que falharam na criação:
- Query: membros/creators com
couponSyncStatus = error - Ação: Tenta novamente a criação do cupom no Guru/Yampi
- Frequência: Diária
Aprovação de Vendas de Creators
Aprova vendas de creators cujo período de garantia expirou:
- Query: creator sales com
status = pendingewarrantyEndsAt <= agora - Ação: Muda status para
approved - Frequência: Diária
Upgrade de Tiers de Creators
Promove creators quando atingem o threshold de vendas do próximo tier:
- Query: creators cujo
approvedSalesCount >= nextTier.minSalesCount - Ação: Atualiza
commissionTierIdpara o próximo tier - Frequência: Diária
Creators com tierOverride = true não são afetados pelo upgrade automático.
Social Listening Sync
Busca novas menções de marca no Instagram:
- Query: merchants com
lastSyncAtmais antigo quesyncIntervalHours - Ação: Dispara job de scraping via Apify para hashtags configuradas
- Frequência: Conforme intervalo configurado (padrão: 12h)
Refresh de Token Instagram
Renova tokens do Instagram Graph API antes de expirar:
- Query: merchants com
igTokenExpiresAt < 7 dias - Ação: Chama Meta Graph API para refresh do token
- Frequência: Diária
Relatório Semanal Discord
Envia resumo de métricas para o canal do Discord:
- Frequência: Segundas-feiras às 03:00 UTC
Arquivamento de Logs
Move logs antigos de webhook para R2 e limpa do banco:
- Query:
webhookLogsewebhookDeliveriescom mais de 90 dias - Ação: Arquiva em R2 (Cloudflare storage), remove do D1
- Frequência: Diária
Retries e Resiliência
Webhooks Outbound
- Até 5 tentativas com backoff exponencial
- Status rastreado em
webhookDeliveries - Logs acessíveis em Settings → Webhooks → Deliveries
Sincronização de Cupons
- Até 3 tentativas automáticas via cron
- Campos
couponSyncAttemptsecouponSyncErrorrastreiam o progresso - Falhas persistentes requerem intervenção manual
Relacionado
- Webhooks - Configuração de webhooks inbound
- Outbound Webhooks - Webhooks enviados pelo Rafobase