FT-Referenz: FT343 (NENE2-FT/threadlog) — Zweistufiges Kommentar-Thread-System mit Tombstone-Löschung (Inhalt ersetzt durch [deleted]), Antwort-Tiefenbegrenzung, beitragsbezogene Isolierung und Prävention von Antworten auf gelöschte Kommentare, 14 Tests / 40+ Assertions BESTANDEN.
Diese Anleitung zeigt, wie ein Kommentarsystem mit einer Antwortebene gebaut wird: Root-Kommentare können Antworten erhalten, aber Antworten können nicht beantwortet werden (maximale Tiefe = 1). Gelöschte Kommentare werden tombstoniert, um die Thread-Struktur zu erhalten.
CREATE TABLE comments ( id INTEGER PRIMARY KEY AUTOINCREMENT, post_id TEXT NOT NULL, -- opaker Beitragsbezeichner parent_id INTEGER REFERENCES comments(id), -- NULL = Root-Kommentar author TEXT NOT NULL, content TEXT NOT NULL, deleted INTEGER NOT NULL DEFAULT 0, deleted_at TEXT, created_at TEXT NOT NULL);
1 2 3 4 5 6 7 8 9 10
parent_id IS NULL = Root-Kommentar; parent_id IS NOT NULL = Antwort.
public function canReceiveReply(int $commentId): bool{ $row = $this->findById($commentId); if ($row === null) { throw new CommentNotFoundException($commentId); } if ($row['deleted']) { throw new CommentDeletedException($commentId); } // Nur Root-Kommentare (parent_id = null) können Antworten haben return $row['parent_id'] === null;}
1 2 3 4 5 6 7 8 9 10 11 12
409 zurückgeben, wenn canReceiveReply() false zurückgibt.
Anleitung: Threaded-Comments-API
Diese Anleitung zeigt, wie ein Kommentarsystem mit einer Antwortebene gebaut wird: Root-Kommentare können Antworten erhalten, aber Antworten können nicht beantwortet werden (maximale Tiefe = 1). Gelöschte Kommentare werden tombstoniert, um die Thread-Struktur zu erhalten.
Schema
2
3
4
5
6
7
8
9
10
parent_id IS NULL= Root-Kommentar;parent_id IS NOT NULL= Antwort.Endpunkte
POST/posts/{postId}/commentsGET/posts/{postId}/commentsGET/posts/{postId}/comments/{id}POST/posts/{postId}/comments/{id}/repliesDELETE/posts/{postId}/comments/{id}Root-Kommentar erstellen
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Kommentare auflisten
2
3
4
5
6
7
8
9
10
11
12
13
14
Kommentare sind auf
post_idbezogen. Kommentare vonpost-1erscheinen nie in der Liste vonpost-2.Einzelnen Kommentar abrufen
2
3
4
5
6
7
8
9
10
11
12
Antwort hinzufügen (Maximale Tiefe = 1)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Tiefen-Check-Implementierung
2
3
4
5
6
7
8
9
10
11
12
409 zurückgeben, wenn
canReceiveReply()false zurückgibt.Tombstone-Löschung
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Tombstoning bewahrt die Thread-Struktur. Antworten bleiben sichtbar, auch nachdem der Elternkommentar gelöscht wurde.
2
3
4
5
6
7
Tombstone-SQL
2
3
4
5
Was NICHT zu tun ist
detailist besserpost_id-Scope in Abfragen