Geek Social — Documentação
Banco de dadosTables

post_reactions

Reações (gamer-themed) em posts.

Reações em posts. O Geek Social usa um set fixo de reações temáticas (não emoji livre):

  • power_up (⚡) — gostei muito / força
  • epic (🌟) — épico, espetacular
  • critical (💥) — crítico, golpe certeiro
  • loot (💎) — quero! / desejado
  • gg (🎯) — good game, bem jogado

Cada usuário pode reagir uma vez por post (unique (post_id, user_id)). Reagir de novo trocando o tipo é UPDATE.

Colunas

ColunaTipoNullableDefault
id uuidNOT NULLgen_random_uuid()
post_iduuidNOT NULL
user_iduuidNOT NULL
typeenumcolumnNOT NULL
created_attimestampNOT NULLnow()

primary key   unique

Funcionalidade dos campos

  • id — UUID, PK
  • post_id — FK pra posts (cascade delete)
  • user_id — FK pra users (cascade delete)
  • type — enum reactionTypeEnum: power_up | epic | critical | loot | gg
  • created_at — momento da reação (mesmo se trocar tipo, o created_at original permanece — é apenas a reação inicial)

Foreign keys

Coluna(s)ReferênciaON DELETEON UPDATE
post_idposts.idcascadeno action
user_idusers.idcascadeno action

Índices

NomeÚnicoColunasWHERE (parcial)
post_reactions_post_user_uniquesimpost_id, user_id

Unique post_reactions_post_user_unique em (post_id, user_id). Reagir de novo: UPSERT (Drizzle: onConflictDoUpdate).

Constraints

  • PRIMARY KEY (id)

Contagem por post

PostsService carrega reaction_counts: { power_up: N, epic: N, ... } agregado por type pra exibir no card do post. Implementação atual usa GROUP BY type. Para alta volumetria, considerar denormalização em posts com triggers.

Padrões de uso

  • ReagirPOST /posts/:id/react { type } faz UPSERT
  • Trocar reação — UPSERT mesmo endpoint com type diferente
  • RemoverDELETE /posts/:id/react
  • Listar quem reagiuGET /posts/:id/reactions (paginado)

Tabelas relacionadas

On this page