Behebe zwei Bugs im Kurator-Kommentar-System

Bug 1: Special-Kuratoren für Special-Puzzles berücksichtigen
- Kommentare zu Special-Puzzles werden jetzt korrekt an Special-Kuratoren geroutet
- Logik erweitert: Prüft zuerst puzzle.specialId, dann genreId, dann global
- Special-Kuratoren werden über CuratorSpecial abgerufen

Bug 2: Prisma Schema konsistent mit Migration
- onDelete: SetNull zur genre-Relation in CuratorComment hinzugefügt
- Entspricht jetzt dem Foreign Key Constraint in der Migration
This commit is contained in:
Hördle Bot
2025-12-03 23:15:18 +01:00
parent 0054facbe7
commit 40d6ea75f0
2 changed files with 25 additions and 22 deletions

View File

@@ -96,21 +96,35 @@ export async function POST(request: NextRequest) {
// Determine responsible curators
const finalGenreId = genreId !== null && genreId !== undefined ? Number(genreId) : puzzle.genreId;
const specialId = puzzle.specialId;
let curatorIds: number[] = [];
const allCuratorIds = new Set<number>();
if (finalGenreId === null) {
// Global puzzle: Get all global curators
const globalCurators = await prisma.curator.findMany({
// Get all global curators (always included)
const globalCurators = await prisma.curator.findMany({
where: {
isGlobalCurator: true
},
select: {
id: true
}
});
globalCurators.forEach(gc => allCuratorIds.add(gc.id));
// Check for special puzzle first (takes precedence)
if (specialId !== null) {
// Special puzzle: Get curators for this special + all global curators
const specialCurators = await prisma.curatorSpecial.findMany({
where: {
isGlobalCurator: true
specialId: specialId
},
select: {
id: true
curatorId: true
}
});
curatorIds = globalCurators.map(c => c.id);
} else {
specialCurators.forEach(cs => allCuratorIds.add(cs.curatorId));
} else if (finalGenreId !== null) {
// Genre puzzle: Get curators for this genre + all global curators
const genreCurators = await prisma.curatorGenre.findMany({
where: {
@@ -120,22 +134,11 @@ export async function POST(request: NextRequest) {
curatorId: true
}
});
const globalCurators = await prisma.curator.findMany({
where: {
isGlobalCurator: true
},
select: {
id: true
}
});
// Combine and deduplicate curator IDs
const allCuratorIds = new Set<number>();
genreCurators.forEach(cg => allCuratorIds.add(cg.curatorId));
globalCurators.forEach(gc => allCuratorIds.add(gc.id));
curatorIds = Array.from(allCuratorIds);
}
// else: Global puzzle - only global curators (already added above)
curatorIds = Array.from(allCuratorIds);
if (curatorIds.length === 0) {
return NextResponse.json(

View File

@@ -159,7 +159,7 @@ model CuratorComment {
puzzleId Int
puzzle DailyPuzzle @relation(fields: [puzzleId], references: [id], onDelete: Cascade)
genreId Int?
genre Genre? @relation(fields: [genreId], references: [id])
genre Genre? @relation(fields: [genreId], references: [id], onDelete: SetNull)
message String
createdAt DateTime @default(now())