Modelo de Dados
O esquema tipado detalhado vive nas migrations do Supabase e empackages/database/types.ts. Esta página resume as partes do modelo que importam para o raciocínio de produto e operacional.
Regras de design
- O Supabase Postgres é o sistema de registro.
- Webhooks são armazenados como registros operacionais de primeira classe.
- Conversas são derivadas de um histórico de mensagens durável.
- Jobs de outbox são linhas explícitas, não detalhes internos ocultos de queue.
- O escopo por workspace e o RLS são obrigatórios em toda tabela.
Grupos centrais de entidades
Workspace e acesso
workspacesworkspace_membersapi_keys
api_keys são delimitadas por workspace e usadas para autenticação da API REST pública v1. Todas as operações com chaves filtram pelo workspace_id resolvido do chamador — chaves de outros workspaces nunca são visíveis nem operáveis.
Plano de canal e contato
channelscontactstagscontact_tag_links
Caixa de entrada e ledger de mensagens
conversationsmessagesmessage_events
Templates, campanhas e jornadas
templatescampaignscampaign_recipientsjourneys
Camada de IA e Margaret
llm_provider_configs— configuração de provider de LLM por workspace (OpenAI, Anthropic, OpenRouter, Ollama, vLLM). Referencia segredos armazenados no Supabase Vault.workspace_secret_bindings— mapeia um workspace para um segredo nomeado do Vault (por exemplo, uma chave de API de LLM ou um token de acesso da Meta). Segredos nunca aparecem em colunas em texto puro.ai_agents— define a persona de um agente de IA, a seleção de modelo, as permissões de ferramentas e as configurações de pseudonimização de PII por workspace.ai_threads— uma thread de contexto de conversa de IA associada a um par contato/conversa.ai_thread_messages— mensagens individuais dentro de uma thread de IA (papéis de user, assistant, tool).ai_agent_executions— log de auditoria das execuções de uso de ferramentas durante a execução do agente (BORD-140–143). Cada execução registra o agente, as ferramentas invocadas, entrada/saída e o resultado.
Plano de webhook e operacional
webhook_eventsoutbox_jobsaudit_logs
webhook_eventsarmazena entregas de provider e de parceiros recebidasoutbox_jobsarmazena trabalho assíncrono de acompanhamento, incluindo envios de mensagemaudit_logsarmazena ações de operadores e do sistema (mudanças de membros, exclusões por LGPD/GDPR, rotações de segredo, operações de escrita que precisam de revisão)
Design orientado a webhook (webhook-first)
Os registros de webhook trazem:- origem e tópico
- resultado da verificação
- chaves de deduplicação
- status de processamento
- contagens de tentativas
- resumos de payload
Postura de realtime
O esquema habilita o Supabase Realtime em tabelas operacionais como:conversationsmessageswebhook_eventsoutbox_jobscampaigns
Nota sobre a implementação atual
O repositório preserva os contratos de rota e de UI com uma implementação tipada em memória em@repo/database quando WHATSAPP_PLATFORM_DATA_MODE=mock. Isso é uma escolha de entrega, não um esquema diferente. O esquema canônico vive nas migrations do Supabase e nos tipos gerados.