Pular para o conteúdo principal

Modelo de Dados

Diagrama ER das principais entidades do sistema.

Diagrama Entidade-Relacionamento

Bancos de Dados

PostgreSQL (Dados Transacionais)

  • Tenants - Organizações
  • Users - Usuários do sistema
  • Channels - Canais WhatsApp conectados
  • Contacts - Contatos/Clientes
  • Messages - Mensagens (somente metadados)
  • Campaigns - Campanhas de marketing
  • Templates - Templates HSM

MongoDB (Dados de Histórico)

  • MessageHistory - Histórico completo de mensagens
  • WebhookLogs - Logs de webhooks recebidos
  • AuditLogs - Logs de auditoria

Redis (Cache e Filas)

  • Sessions - Sessões de usuários
  • RateLimits - Controle de rate limiting
  • MessageQueue - Fila de envio de mensagens
  • Events - Pub/Sub para WebSockets

Índices Importantes

-- Busca rápida de contatos por telefone
CREATE INDEX idx_contacts_phone ON contacts(tenant_id, phone);

-- Mensagens recentes por contato
CREATE INDEX idx_messages_contact ON messages(contact_id, created_at DESC);

-- Campanhas por status
CREATE INDEX idx_campaigns_status ON campaigns(tenant_id, status, scheduled_at);

Isolamento Multi-tenant

Todas as tabelas principais possuem coluna tenant_id com filtro automático via Hibernate Filters.

@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId")
@Entity
class Contact : BaseEntity() {
@Column(name = "tenant_id")
lateinit var tenantId: String
// ...
}