Módulos
Reports
Denúncias de conteúdo abusivo em 5 superfícies (user, message, post, collection, conversation).
Visão geral
Sistema de denúncias do Geek Social. Cobre 5 superfícies:
user— perfil/comportamento de outro usuáriomessage— mensagem específica de chatpost— post no feedcollection— coleção (conteúdo inadequado, NSFW)conversation— conversa inteira (chat de grupo abusivo)
Sem moderação automatizada — admin vê dashboard de pendentes e marca como reviewed ou dismissed manualmente. Pendência: integração com Linear/issue tracker.
Entidades principais
| Tabela | Papel |
|---|---|
reports | Denúncia com targetType polimórfico |
Endpoints
1 endpoint público:
| Endpoint | Resumo |
|---|---|
POST /reports | Criar denúncia |
Endpoints admin (não documentados aqui ainda — protegidos por flag de role admin no JWT, plano futuro).
Fluxos
Denunciar conteúdo
Validação polimórfica
Lifecycle
Eventos de socket
Sem eventos. Reports é fluxo silencioso (não notifica o reporter quando admin processa, hoje).
Edge cases e regras especiais
- Unique por reporter+target — denúncia duplicada do mesmo user pro mesmo conteúdo retorna conflict; previne spam.
descriptionopcional mas recomendado praother(admin precisa entender contexto).target_idpolimórfico sem FK — ao apagar conteúdo, denúncia continua existindo com referência inválida. Admin lida na UI ("conteúdo já removido").- 5 superfícies fixas no enum — adicionar nova requer migration (
ALTER TYPE report_target_type ADD VALUE). - 5 razões fixas:
spam | harassment | nsfw | hate | other. Critério editorial — adicionar novas é mudança de produto. - Sem flow de notificação ao denunciado — preserva privacidade do reporter.
- Self-report bloqueado? Não enforced. User pode denunciar a si mesmo (raro, sem efeito prático).
Dependências entre módulos
- Polimorfismo via
target_type/target_id— touches users, messages, posts, collections, conversations - Sem dependência outbound — reports não dispara nada além de INSERT