Banco de dadosTables
post_comments
Comentários em posts (planos, sem aninhamento).
Comentários em posts. Sem aninhamento (sem reply-to-comment) por design — feed simples, sem threads. Cada comment é só texto, sem mídia.
Colunas
| Coluna | Tipo | Nullable | Default |
|---|---|---|---|
| id ● | uuid | NOT NULL | gen_random_uuid() |
| post_id | uuid | NOT NULL | — |
| user_id | uuid | NOT NULL | — |
| content | text | NOT NULL | — |
| created_at | timestamp | NOT NULL | now() |
| updated_at | timestamp | NOT NULL | now() |
● primary key ◆ unique
Funcionalidade dos campos
id— UUID, PKpost_id— pai (cascade)user_id— autor (cascade). Editar é restrito ao autor; deletar pode ser autor OU dono do post.content— texto livre obrigatório.created_at/updated_at—updated_atmuda em edits (UI mostra "editado").
Foreign keys
| Coluna(s) | Referência | ON DELETE | ON UPDATE |
|---|---|---|---|
| post_id | posts.id | cascade | no action |
| user_id | users.id | cascade | no action |
Índices
| Nome | Único | Colunas | WHERE (parcial) |
|---|---|---|---|
| post_comments_post_created_at_idx | não | post_id, created_at | — |
post_comments_post_created_at_idx ordena cronologicamente os comments de um post (mais antigos primeiro, paginação simples).
Constraints
PRIMARY KEY (id)
Permissões de edição/exclusão
- Autor: pode editar e deletar
- Dono do post: pode deletar (pra moderar comentários no próprio post), mas não editar (preserva voz do autor)
Implementação no CommentsService.canModify(userId, comment, post).
Padrões de uso
- Adicionar —
POST /posts/:id/comments { content }→ INSERT + dispara notificaçãopost_commentao dono do post (só se autor != dono) - Editar —
PUT /posts/:postId/comments/:id - Deletar —
DELETE /posts/:postId/comments/:id
Tabelas relacionadas
posts— pai (cascade)users— autor (cascade)notifications—post_comment