Rafobase Logo

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:

FilaFinalidade
rafobase-queueProcessamento de webhooks (Guru, Yampi, Instagram)
rafobase-sync-queueSincronização de cupons e campanhas
rafobase-outbound-webhooksEntrega de webhooks outbound (custom, Discord, Klaviyo)
rafobase-import-queueImportação bulk de perfis do Klaviyo
rafobase-social-queueSincronização de social listening (Instagram/Apify)

Fluxo de Webhook

Quando uma plataforma (Guru/Yampi) envia um webhook:

  1. O endpoint recebe o payload e salva em webhookLogs (status: pending)
  2. A mensagem é enfileirada para processamento assíncrono
  3. O consumer processa: valida cupom, cria referral, credita wallet
  4. O log é atualizado para processed ou failed

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 = pending e warrantyEndsAt <= agora
  • Ação: Muda status para approved, cria wallet transaction com status available
  • 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 = processing e createdAt < 24h atrás
  • Ação: Marca como cancelled e 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 = pending e warrantyEndsAt <= 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 commissionTierId para 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 lastSyncAt mais antigo que syncIntervalHours
  • 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: webhookLogs e webhookDeliveries com 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 couponSyncAttempts e couponSyncError rastreiam o progresso
  • Falhas persistentes requerem intervenção manual

Relacionado

On this page