Geek Social — Documentação
Banco de dadosTables

conversations

Conversas de chat — DM 1-1 ou grupo.

Container das mensagens de chat. Tipo determina semântica:

  • dm — DM 1-1, sempre 2 membros, criada quando amizade é aceita ou DM request é aceito
  • group — grupo com nome, descrição, capa; múltiplos membros com roles

Conversas têm flag is_temporary que liga o modo "Snapchat-style" — mensagens são apagadas após X tempo de leitura por usuário (ver conversation_members e messages).

Colunas

ColunaTipoNullableDefault
id uuidNOT NULLgen_random_uuid()
typeenumcolumnNOT NULL
namevarcharNULL ok
descriptiontextNULL ok
cover_urlvarcharNULL ok
created_byuuidNULL ok
is_temporarybooleanNOT NULLfalse
created_attimestampNOT NULLnow()
updated_attimestampNOT NULLnow()

primary key   unique

Funcionalidade dos campos

  • id — UUID, PK
  • typedm ou group
  • name — texto livre. Obrigatório pra group; ignorado em dm (UI mostra nome do outro user).
  • description — opcional, livre. Só para grupos.
  • cover_url — capa do grupo (S3/MinIO).
  • created_by — quem criou. Set null em delete (preserva grupo se dono apaga conta).
  • is_temporary — modo ephemeral. Hoje per-conversation (não per-user); a flag per-user vive em conversation_members.hidden_at.
  • created_at / updated_at — managed.

Foreign keys

Coluna(s)ReferênciaON DELETEON UPDATE
created_byusers.idset nullno action

Índices

Esta tabela não tem índices customizados.

Sem índices secundários customizados. Lookups são por membership via conversation_members.

Constraints

  • PRIMARY KEY (id)

DM 1-1 e amizade

DMs são criadas automaticamente quando:

  • Uma amizade é aceita (friendsService.acceptRequest chama chatGateway.linkFriendship)
  • Um dm_request é aceito por user que não é amigo

DMs entre não-amigos passam por DM request primeiro (ver dm_requests).

Group permissions

conversation_members.permissions é JSONB { can_send_messages: bool, can_send_files: bool }. Usado pra moderação leve em grupos. Roles (owner | admin | member) determinam quem pode mudar essas permissions.

Conversa temporária

Ao criar conversa com is_temporary=true:

  • Mensagens novas têm is_temporary=true
  • Cron runTemporaryCleanupRead deleta msgs lidas após período curto (per-user via hidden_for_user_ids)
  • Cron runTemporaryCleanupTtl deleta mensagens antigas (TTL absoluto, fallback)

Padrões de uso

  • Criar DMPOST /chat/conversations { type: 'dm', otherUserId } (ou auto-criada por amizade/dm_request)
  • Criar grupoPOST /chat/groups { name, memberIds } (criador vira owner)
  • Update grupoPUT /chat/groups/:id
  • Sair — DELETE membro próprio (cascade simples no conversation_members)
  • Apagar grupo — apenas owner; cascade message + members

Tabelas relacionadas

On this page