From 40d6ea75f04546ac75b43410fadf2253d4dc4eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=B6rdle=20Bot?= Date: Wed, 3 Dec 2025 23:15:18 +0100 Subject: [PATCH] Behebe zwei Bugs im Kurator-Kommentar-System MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- app/api/curator-comment/route.ts | 45 +++++++++++++++++--------------- prisma/schema.prisma | 2 +- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/app/api/curator-comment/route.ts b/app/api/curator-comment/route.ts index 74fd077..9bc9a47 100644 --- a/app/api/curator-comment/route.ts +++ b/app/api/curator-comment/route.ts @@ -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(); - 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(); 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( diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 5da755e..40330a5 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -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())