Skip to content

Banco de Dados

O CRM usa PostgreSQL 13 com extensão pgvector (para futuras features de embedding). O schema é gerenciado via Prisma ORM.

Acesso

Em produção:

bash
# Via container (dentro do servidor)
docker exec -it crm-galdix-postgres-1 psql -U $POSTGRES_USER -d $POSTGRES_DB

# Via logs
docker logs crm-galdix-postgres-1 --tail 50

Em desenvolvimento:

bash
# Usando DATABASE_URL do .env.secrets
psql $DATABASE_URL

# Ou via Prisma Studio
cd backend && npx prisma studio

Tecnologia

ComponenteVersãoFunção
PostgreSQL13Banco relacional principal
pgvectorlatestExtensão para vetores (futuro)
Prisma Client5.xORM — queries type-safe
Prisma MigrateMigrations versionadas

Configuração de produção

O container PostgreSQL roda com:

  • CPU: 1 core (cpu_quota=100000)
  • Persistência: Volume Docker postgres_data/var/lib/postgresql/data
  • Rede: network_swarm_public com alias crm-postgres
  • Health check: pg_isready a cada 10s

Estatísticas do schema

MétricaValor
Modelos (tabelas)~40
Tamanho do schema942 linhas
Relações principaisOrganization → tudo (multi-tenant)
Índices~50+ para performance

Seções desta área

Padrões do schema

Multi-tenancy

Quase toda tabela tem organizationId: String como chave de isolamento. O TenantInterceptor garante que toda query inclui esse campo.

IDs

  • UUID (via Prisma @default(uuid())) para a maioria das entidades
  • CUID (via @default(cuid())) para entidades de volume alto (tokens, logs, eventos)

Timestamps

Padrão em toda tabela com dados mutáveis:

prisma
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

Soft delete

O sistema não usa soft delete. Exclusões são permanentes. Logs de auditoria registram as ações antes da exclusão.

JSON fields

Campos Json? são usados para dados estruturados variáveis:

  • Campaign.behaviorRules — regras de comportamento
  • Campaign.metadata — dados extras
  • Store.settings — configurações por loja
  • Store.businessHours — horários de funcionamento
  • Transaction.items — produtos da venda
  • ChatwootConfig.*Message — mensagens configuráveis