Geek Social — Documentação
Módulos

Friends

Sistema de amizades simétricas + bloqueios direcionais.

Visão geral

Sistema social com duas relações:

  • Friendship — simétrica em significado, com fluxo pedido/aceite (modelado em uma única tabela com requester_id/receiver_id)
  • Block — assimétrica e direcional (A bloqueia B é diferente de B bloqueia A; podem coexistir)

Bloquear um amigo derruba a amizade automaticamente, desconecta chat 1-1 entre os dois, e esconde conteúdo de ambos os lados.

Entidades principais

TabelaO que guarda
friendshipsPedidos pending + amizades aceitas
user_blocksBloqueios direcionais

Endpoints

11 endpoints divididos em duas seções:

Pedidos / amigos (montado em /friends):

EndpointResumo
POST /friends/requestsEnviar pedido
GET /friends/requests/receivedPedidos pra mim
GET /friends/requests/sentPedidos que enviei
POST /friends/requests/:id/acceptAceitar
POST /friends/requests/:id/rejectRejeitar
DELETE /friends/requests/:idCancelar enviado
GET /friendsMinha lista de amigos
DELETE /friends/:friendIdDesfazer amizade

Blocks (montado em /blocks):

EndpointResumo
POST /blocks/:userIdBloquear
DELETE /blocks/:userIdDesbloquear
GET /blocksLista de bloqueados

Fluxos

Pedido + aceite

Bloquear (cascade)

Listar amigos (denormalização)

Eventos de socket

EventoQuando
notification:new (friend_request)Pedido recebido
notification:new (friend_accepted)Aceito
conversation:refreshBlock/unblock — força frontend re-fetch da lista
friend:link (interno chat)linkFriendship após aceite — vincula sockets ao mesmo room DM
friend:unlink (interno chat)unlinkFriendship após remove ou block

Edge cases e regras especiais

  • Mutual interest: se A pede a B e já existe pending B→A, o backend aceita automaticamente (não cria duplicado)
  • Block desfaz amizade silenciosamente — sem notificação ao bloqueado de que foi bloqueado
  • Unblock NÃO restaura amizade — o user precisa refazer pedido. Block é "ruptura limpa".
  • Tentar adicionar quem te bloqueou: backend retorna BLOCKED — frontend pode mostrar genérico "não foi possível enviar"
  • Amizade não existe sem aceitefriend_accepted é o gatilho real (pending é "interesse expresso")
  • Cancel ≠ Reject — cancel é o requester desfazendo, reject é o receiver recusando. Ambos viram DELETE; sem notificação em qualquer caso
  • Privacy interage com amizade — perfil friends_only revela tudo só pra accepted friends

Dependências entre módulos

  • Notifications — friend_request, friend_accepted
  • Chat — linkFriendship/unlinkFriendship pra conectar/desconectar DM 1-1
  • Users — privacy gating em getProfile depende de areFriends
  • Posts/Feedfriends_only posts só aparecem pra friends accepted
  • Collections / Itemsfriends_only collections seguem mesma regra

On this page