Banco de dados
ER Diagram
Visão geral completa do schema do banco — 28 tabelas e seus relacionamentos.
O schema completo é gerado automaticamente a partir do src/shared/infra/database/schema.ts usando drizzle-dbml-generator. O DBML completo está em /schema.dbml — cole no dbdiagram.io pra um diagrama interativo navegável.
ER completo (Mermaid)
Diagrama por domínio
Auth & sessão
Conteúdo (coleções e itens)
Vitrine (listings + offers + ratings)
Social (amizade + bloqueio)
Posts e feed
Chat
Notificações + presence + push
Steam imports + reports
Como o ER é regenerado
# No backend:
cd geek-social-api
npm run export:dbml # gera dist/schema.dbml + dist/schema.json
# No docs:
cd geek-social-docs
npm run sync # copia pra public/
npm run gen # regenera tabelas auto-geradasO DBML completo serve dois propósitos:
- ER diagrams pro humano (este portal, dbdiagram.io, dbdocs.io)
- Source of truth pra validação cruzada de schema vs migrations
Notas sobre relacionamentos
- Self-reference em messages —
messages.reply_to_idaponta pramessages.id(sem cascade — preserva reply mesmo se a msg referenciada for deletada; UI mostra "mensagem deletada") - Polimorfismo em notifications.entity_id — não é FK; aponta pra UUID de tabelas variadas dependendo do
type(ver tipos de notificação) - Polimorfismo em reports.target_id — idem, aponta pra users/messages/posts/collections/conversations dependendo de
target_type - Sem FK em listing_ratings.rater_id/ratee_id — usa
references()mas semonDelete— preserva ratings se user deleta conta (precisa de tratamento especial no fluxo de delete)