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
// ...
}