Geek Social — Documentação
Módulos

Users

Perfis públicos e privados, settings, capa/fundo, exclusão de conta.

Visão geral

O módulo Users cobre todo o ciclo de vida do perfil — desde a leitura "me/perfil próprio" até gerenciamento de mídia (avatar, capa, background) e exclusão permanente de conta. É o complemento social do módulo Auth (que cuida de credenciais).

Operações distintas por intenção:

  • /me/... — opera no usuário autenticado (perfil próprio, settings, mídia)
  • /:id/... — opera em perfil alheio (read-only com privacy gating)

Entidades principais

TabelaO que guarda
usersConta + perfil + privacy + flags + URLs de mídia
user_presenceLast seen para perfis offline

Endpoints

API Reference — Users. 15 endpoints:

EndpointAuthResumo
GET /users/meJWTMeu perfil completo
GET /users/search?q=JWTBuscar por nome/e-mail
GET /users/:id/profileopcionalPerfil público
GET /users/:id/friendsopcionalAmigos públicos
PUT /users/me/profileJWTEditar campos de perfil
PATCH /users/me/settingsJWTPrivacy/visibility settings
POST /users/me/avatarJWTUpload avatar
DELETE /users/me/avatarJWTRemover avatar
POST /users/me/coverJWTUpload capa
DELETE /users/me/coverJWTRemover capa
POST /users/me/backgroundJWTUpload fundo
DELETE /users/me/backgroundJWTRemover fundo
PUT /users/me/cover-colorJWTCor sólida de capa
PUT /users/me/background-colorJWTCor sólida de fundo
DELETE /users/meJWTExcluir conta permanentemente

Fluxos

Editar perfil

Capa/fundo: imagem ou cor (mutuamente exclusivos)

Excluir conta

Privacy gating em perfis públicos

Eventos de socket

Users não emite eventos diretamente. Mas:

  • PATCH /me/settings muda show_presence → backend dispara presence:update se mudou
  • PATCH /me/settings muda show_read_receipts → backend chama chatGateway.refreshConversationsForUserAndPeers pra propagar pros pares

Edge cases e regras especiais

  • Validação de website: aceita string vazia (transforma em null) ou URL válida via Zod. Permite "limpar campo" no PATCH.
  • interests cap em 20 — frontend mostra erro se exceder.
  • bio até 10000 chars — texto livre, sem markdown renderizado.
  • birthday é DATE — sem hora; idade calculada client-side.
  • Capa+cor mutuamente exclusivos — setar imagem zera cor e vice-versa. Ambos null = gradient default.
  • Excluir conta é irreversível — sem soft-delete por design ("zero débito técnico"). Cascade implacável.
  • Search não revela usuários private — apenas public e friends_only (se há amizade).
  • /me traz info SENSÍVEL que /:id/profile esconde — email, settings, presence flags.

Dependências entre módulos

  • Friends — privacy gating depende de friendsRepository.areFriends()
  • Presence (Chat) — emit de presence:update em mudança de show_presence
  • Storage (S3) — uploads via S3Adapter
  • Posts/Feed — perfil expõe contador de posts e timeline via FeedService
  • Collections — perfil expõe lista de coleções públicas

On this page