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
| Tabela | O que guarda |
|---|---|
users | Conta + perfil + privacy + flags + URLs de mídia |
user_presence | Last seen para perfis offline |
Endpoints
API Reference — Users. 15 endpoints:
| Endpoint | Auth | Resumo |
|---|---|---|
GET /users/me | JWT | Meu perfil completo |
GET /users/search?q= | JWT | Buscar por nome/e-mail |
GET /users/:id/profile | opcional | Perfil público |
GET /users/:id/friends | opcional | Amigos públicos |
PUT /users/me/profile | JWT | Editar campos de perfil |
PATCH /users/me/settings | JWT | Privacy/visibility settings |
POST /users/me/avatar | JWT | Upload avatar |
DELETE /users/me/avatar | JWT | Remover avatar |
POST /users/me/cover | JWT | Upload capa |
DELETE /users/me/cover | JWT | Remover capa |
POST /users/me/background | JWT | Upload fundo |
DELETE /users/me/background | JWT | Remover fundo |
PUT /users/me/cover-color | JWT | Cor sólida de capa |
PUT /users/me/background-color | JWT | Cor sólida de fundo |
DELETE /users/me | JWT | Excluir 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/settingsmudashow_presence→ backend disparapresence:updatese mudouPATCH /me/settingsmudashow_read_receipts→ backend chamachatGateway.refreshConversationsForUserAndPeerspra 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).
/metraz info SENSÍVEL que/:id/profileesconde — email, settings, presence flags.
Dependências entre módulos
- Friends — privacy gating depende de friendsRepository.areFriends()
- Presence (Chat) — emit de
presence:updateem 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