Implementiere Kurator-Kommentar-System
- Benutzer können nach Rätsel-Abschluss optional Nachricht an Kuratoren senden - Kommentare werden in Datenbank gespeichert und in /curator angezeigt - Neue Datenbank-Modelle: CuratorComment und CuratorCommentRecipient - API-Routen für Kommentar-Versand, Abfrage und Markierung als gelesen - Rate-Limiting: 1 Kommentar pro Spieler pro Rätsel (persistent in DB) - Sicherheitsschutz: PlayerIdentifier-Validierung, Puzzle-Validierung - Automatische Zuordnung zu Kuratoren (Genre-basiert + globale Kuratoren) - Frontend: Kommentar-Formular in Game-Komponente - Frontend: Kommentare-Anzeige in Kuratoren-Seite mit Markierung als gelesen - Übersetzungen für DE und EN hinzugefügt
This commit is contained in:
@@ -34,6 +34,7 @@ model Genre {
|
||||
songs Song[]
|
||||
dailyPuzzles DailyPuzzle[]
|
||||
curatorGenres CuratorGenre[]
|
||||
comments CuratorComment[]
|
||||
}
|
||||
|
||||
model Special {
|
||||
@@ -73,6 +74,7 @@ model DailyPuzzle {
|
||||
genre Genre? @relation(fields: [genreId], references: [id])
|
||||
specialId Int?
|
||||
special Special? @relation(fields: [specialId], references: [id])
|
||||
comments CuratorComment[]
|
||||
|
||||
@@unique([date, genreId, specialId])
|
||||
}
|
||||
@@ -114,6 +116,7 @@ model Curator {
|
||||
|
||||
genres CuratorGenre[]
|
||||
specials CuratorSpecial[]
|
||||
commentRecipients CuratorCommentRecipient[]
|
||||
}
|
||||
|
||||
model CuratorGenre {
|
||||
@@ -149,3 +152,31 @@ model PoliticalStatement {
|
||||
|
||||
@@index([locale, active])
|
||||
}
|
||||
|
||||
model CuratorComment {
|
||||
id Int @id @default(autoincrement())
|
||||
playerIdentifier String
|
||||
puzzleId Int
|
||||
puzzle DailyPuzzle @relation(fields: [puzzleId], references: [id], onDelete: Cascade)
|
||||
genreId Int?
|
||||
genre Genre? @relation(fields: [genreId], references: [id])
|
||||
message String
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
recipients CuratorCommentRecipient[]
|
||||
|
||||
@@unique([playerIdentifier, puzzleId])
|
||||
@@index([genreId])
|
||||
}
|
||||
|
||||
model CuratorCommentRecipient {
|
||||
id Int @id @default(autoincrement())
|
||||
commentId Int
|
||||
comment CuratorComment @relation(fields: [commentId], references: [id], onDelete: Cascade)
|
||||
curatorId Int
|
||||
curator Curator @relation(fields: [curatorId], references: [id], onDelete: Cascade)
|
||||
readAt DateTime?
|
||||
|
||||
@@unique([commentId, curatorId])
|
||||
@@index([curatorId])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user