Geek Social — Documentação
Módulos

Chat

Conversas DM 1-1 + grupos com roles, mensagens com mídia/áudio/calls, modo Snapchat, DM requests.

Visão geral

O módulo Chat é o mais extenso do sistema (32 endpoints REST + ~15 eventos socket). Cobre:

  • Conversas DM 1-1 — entre amigos. Auto-criadas no aceite de friendship.
  • Grupos — N membros com roles (owner/admin/member) + permissions granulares
  • DM Requests — pedido inicial entre não-amigos antes de virar conversa real
  • Mensagens — texto, attachments (audio/video/imagem/arquivo), reply, calls, reactions livres
  • End-to-end encryption (E2EE) — Signal Protocol em DMs e grupos; backend só vê ciphertext. Detalhes em Criptografia E2EE.
  • Modo Snapchat per-user — mensagens efêmeras em conversas marcadas como temporary
  • Forward / share — replicar mensagens em N conversas
  • Read receipts + typing — eventos de socket ephemeral
  • Calls 1-1 — sinalização WebRTC via socket; backend não relays media

Entidades principais

TabelaPapel
conversationsContainer (DM ou group)
conversation_membersMembership + estado per-user
dm_requestsPré-conversa entre não-amigos
messagesConteúdo (texto, attachments refs, callMetadata)
message_reactionsReações
message_attachmentsMídia anexada
push_subscriptionsWeb Push subscriptions
user_presenceLast seen

Endpoints

32 endpoints divididos:

  • DM/Requests (5): open dm, send/list/accept/reject dm request
  • Grupos (5): create, get, update, delete, upload cover
  • Membros (5): invite, remove, update role/permissions, leave
  • Mensagens (6): get history, send, delete, forward, react, upload attachment
  • Conversas (9): list, get, mark read, archive/unarchive, mute/unmute, hide, set temporary
  • Push (2): register, remove

Ver API Reference — Chat.

Fluxos

DM com amigo

DM Request (não-amigo)

Enviar mensagem com attachment

Modo Snapchat per-user

Calls 1-1 (WebRTC signaling)

Mute / Archive / Hide

AçãoTabela updatedEfeito
Muteconversation_members.is_muted=trueMensagens chegam, sem push
Archiveconversation_members.is_archived=trueSome da lista ativa, não some o conteúdo
Hide (Snapchat per-user)conversation_members.hidden_at=now()Mensagens novas viram efêmeras pro user

Eventos de socket

Catálogo completo em Eventos de socket. Os principais do chat:

EventoSentido
message:newServer → cliente (room conv:id)
message:editedidem
message:deletedidem
message:reactionidem
conversation:readbidirecional (peer recebe)
conversation:typingbidirecional ephemeral
conversation:refreshserver → user (forçar re-fetch lista)
conversation:createdserver → user (membro adicionado)
conversation:updatedserver → room
presence:online/offline/updateserver → friend-of:userId
import:progress/doneserver → user (Steam)
call:incoming/offer/answer/ice/hangupbidirecional WebRTC signaling

Edge cases e regras especiais

  • DM entre não-amigos vai como dm_request — rotear automaticamente sem confundir UX
  • hidden_for_user_ids em messages é JSONB — guarda ids dos users que "apagaram pra mim"
  • Read receipts respeitam users.show_read_receipts — se desabilitado, eventos não são emitidos
  • Mute não impede notif persistida — só suprime push/sound
  • Group owner único — sair sem transferir owner derruba o grupo
  • Reply preserved se msg original deletadareply_to_id sem cascade; UI mostra "mensagem deletada"
  • Forward limite 20 destinos — anti-spam
  • Attachment sem message_id — possível durante upload preview; se nunca virar mensagem, fica órfão (cleanup pendência)
  • Calls têm callMetadata mesmo se rejeitadastatus registra outcome
  • Push é dual — socket + web push paralelos
  • is_temporary é per-conversation + hidden_at per-user combinam pra modo "Snapchat só pra mim"
  • Group permissions restringem can_send_messages e can_send_files separadamente
  • DM request rejected é final — sender não pode reenviar (unique constraint)
  • Mensagens E2E são opacas pro backendmessages.is_encrypted=true + content carrega ciphertext ("messageType.base64body" em DM; base64body em grupo). Decifração só no cliente; push notifications são metadata-only

Dependências entre módulos

  • Friends — DM 1-1 só entre amigos; block desconecta
  • Notifications — push notif depende de subscriptions ativas
  • Usersshow_presence e show_read_receipts afetam o que é emitido
  • Storage (S3) — uploads de attachments + thumbnails
  • Reports — message/conversation podem ser target de reports
  • Cryptosignal_* tabelas + endpoints /crypto/* provêm o keying material consumido pelas DMs e grupos. Ver Criptografia E2EE.

On this page