diff --git a/app/api/rooms/[code]/route.ts b/app/api/rooms/[code]/route.ts index 51b2260..c93d764 100644 --- a/app/api/rooms/[code]/route.ts +++ b/app/api/rooms/[code]/route.ts @@ -13,6 +13,7 @@ function dbToRoom(row: { totalRounds: number; maxPlayers: number; gameMode: string; + searchAllowed: boolean; startArticle: string; targetArticle: string; roundWinner: string | null; @@ -28,10 +29,12 @@ function dbToRoom(row: { totalRounds: row.totalRounds, maxPlayers: row.maxPlayers, gameMode: (row.gameMode ?? "race") as Room["gameMode"], + searchAllowed: row.searchAllowed ?? false, startArticle: row.startArticle, targetArticle: row.targetArticle, roundWinner: row.roundWinner, - countdownStart: row.countdownStart !== null ? Number(row.countdownStart) : null, + countdownStart: + row.countdownStart !== null ? Number(row.countdownStart) : null, roundStart: row.roundStart !== null ? Number(row.roundStart) : null, createdAt: Number(row.createdAt), }; @@ -82,7 +85,9 @@ export async function PATCH( { params }: { params: Promise<{ code: string }> }, ) { const { code } = await params; - const row = await prisma.room.findUnique({ where: { code: code.toUpperCase() } }); + const row = await prisma.room.findUnique({ + where: { code: code.toUpperCase() }, + }); if (!row) { return Response.json({ error: "Room introuvable" }, { status: 404 }); @@ -91,15 +96,23 @@ export async function PATCH( const room = dbToRoom(row); const body = await request.json(); - const { action, playerId, playerName, article, startArticle, targetArticle } = - body as { - action: string; - playerId?: string; - playerName?: string; - article?: string; - startArticle?: string; - targetArticle?: string; - }; + const { + action, + playerId, + playerName, + article, + startArticle, + targetArticle, + value, + } = body as { + action: string; + playerId?: string; + playerName?: string; + article?: string; + startArticle?: string; + targetArticle?: string; + value?: boolean; + }; // Nettoyer les joueurs inactifs avant chaque action room.players = prunePlayers(room.players); @@ -279,7 +292,9 @@ export async function PATCH( if (room.gameMode === "race") { // En mode course, forfait ne termine pas la manche — on attend qu'un vrai gagnant arrive // Sauf si tous ont abandonné - const anyoneStillPlaying = room.players.some((p) => !p.hasWon && !p.hasSurrendered); + const anyoneStillPlaying = room.players.some( + (p) => !p.hasWon && !p.hasSurrendered, + ); if (!anyoneStillPlaying) { room.phase = "results"; // Pas de roundWinner si tout le monde a abandonné @@ -295,6 +310,21 @@ export async function PATCH( return Response.json({ room }); } + // Hôte toggle recherche Ctrl+F + case "setSearchAllowed": { + const host = room.players.find((p) => p.id === playerId); + if (!host?.isHost) { + return Response.json( + { error: "Seul l'hôte peut modifier ce paramètre" }, + { status: 403 }, + ); + } + room.searchAllowed = + typeof value === "boolean" ? value : !room.searchAllowed; + await saveRoom(room); + return Response.json({ room }); + } + // Manche suivante / rejouer case "nextRound": { const host = room.players.find((p) => p.id === playerId); @@ -356,10 +386,12 @@ async function saveRoom(room: Room) { totalRounds: room.totalRounds, maxPlayers: room.maxPlayers, gameMode: room.gameMode, + searchAllowed: room.searchAllowed, startArticle: room.startArticle, targetArticle: room.targetArticle, roundWinner: room.roundWinner, - countdownStart: room.countdownStart !== null ? BigInt(room.countdownStart) : null, + countdownStart: + room.countdownStart !== null ? BigInt(room.countdownStart) : null, roundStart: room.roundStart !== null ? BigInt(room.roundStart) : null, }, }); diff --git a/app/api/rooms/route.ts b/app/api/rooms/route.ts index 19e72f5..dea0a2d 100644 --- a/app/api/rooms/route.ts +++ b/app/api/rooms/route.ts @@ -25,6 +25,7 @@ export type Room = { totalRounds: number; maxPlayers: number; gameMode: "race" | "all_finish"; // race = 1er gagne, all_finish = tout le monde joue + searchAllowed: boolean; startArticle: string; targetArticle: string; roundWinner: string | null; @@ -56,6 +57,7 @@ function dbToRoom(row: { totalRounds: number; maxPlayers: number; gameMode: string; + searchAllowed: boolean; startArticle: string; targetArticle: string; roundWinner: string | null; @@ -71,6 +73,7 @@ function dbToRoom(row: { totalRounds: row.totalRounds, maxPlayers: row.maxPlayers, gameMode: (row.gameMode ?? "race") as Room["gameMode"], + searchAllowed: row.searchAllowed ?? false, startArticle: row.startArticle, targetArticle: row.targetArticle, roundWinner: row.roundWinner, @@ -154,6 +157,7 @@ export async function POST(request: NextRequest) { totalRounds: clampedRounds, maxPlayers: clampedMax, gameMode: clampedMode, + searchAllowed: false, startArticle: "", targetArticle: "", roundWinner: null, diff --git a/app/components/GameScreen.tsx b/app/components/GameScreen.tsx index 92ac6f2..da59993 100644 --- a/app/components/GameScreen.tsx +++ b/app/components/GameScreen.tsx @@ -4,6 +4,7 @@ import { useEffect, useRef } from "react"; import { ArticleView } from "./ArticleView"; import { Breadcrumbs } from "./Breadcrumbs"; import type { Room } from "../api/rooms/route"; +import { useCtrlFBlock } from "../../lib/useSearchAllowed"; type GameScreenProps = { room: Room; @@ -28,6 +29,7 @@ export function GameScreen({ countdown, onNavigate, onRetry, onNextRound, onResetGame, onSurrender, }: GameScreenProps) { const breadcrumbEndRef = useRef(null); + useCtrlFBlock(room.searchAllowed); const myPlayer = room.players.find((p) => p.id === playerId); const isHost = myPlayer?.isHost ?? false; const myFinished = myPlayer?.hasWon || myPlayer?.hasSurrendered; diff --git a/app/components/LobbyScreen.tsx b/app/components/LobbyScreen.tsx index bfaa8b5..428651e 100644 --- a/app/components/LobbyScreen.tsx +++ b/app/components/LobbyScreen.tsx @@ -1,7 +1,6 @@ "use client"; import { useState } from "react"; -import { useSearchAllowed } from "../../lib/useSearchAllowed"; import type { Room } from "../api/rooms/route"; type LobbyScreenProps = { @@ -19,6 +18,7 @@ type LobbyScreenProps = { setTotalRounds: (v: number) => void; gameMode: Room["gameMode"]; setGameMode: (v: Room["gameMode"]) => void; + onSetSearchAllowed: (v: boolean) => void; }; export function LobbyScreen({ @@ -36,11 +36,11 @@ export function LobbyScreen({ setTotalRounds, gameMode, setGameMode, + onSetSearchAllowed, }: LobbyScreenProps) { const isHost = room.players.find((p) => p.id === playerId)?.isHost ?? false; const [copied, setCopied] = useState(false); const [blurred, setBlurred] = useState(true); - const { allowed: searchAllowed, toggle: toggleSearch } = useSearchAllowed(); function copyCode() { navigator.clipboard.writeText(room.code).then(() => { @@ -186,20 +186,26 @@ export function LobbyScreen({ + )} - + {!isHost && ( +
+ 🔍 Recherche Ctrl+F + + {room.searchAllowed ? "Autorisée" : "Bloquée"} + +
+ )} {room.round > 0 && (

diff --git a/app/components/ScreenRouter.tsx b/app/components/ScreenRouter.tsx index 03288e3..aff4f25 100644 --- a/app/components/ScreenRouter.tsx +++ b/app/components/ScreenRouter.tsx @@ -112,6 +112,7 @@ export function ScreenRouter({ maxPlayers={maxPlayers} setMaxPlayers={setMaxPlayers} totalRounds={totalRounds} setTotalRounds={setTotalRounds} gameMode={gameMode} setGameMode={setGameMode} + onSetSearchAllowed={(v) => multi.setSearchAllowed(v)} /> ); diff --git a/lib/generated/prisma/internal/class.ts b/lib/generated/prisma/internal/class.ts index b45e728..0f30add 100644 --- a/lib/generated/prisma/internal/class.ts +++ b/lib/generated/prisma/internal/class.ts @@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = { "clientVersion": "7.7.0", "engineVersion": "75cbdc1eb7150937890ad5465d861175c6624711", "activeProvider": "postgresql", - "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel User {\n id String @id @default(uuid(7))\n name String\n email String @unique\n password String\n banned Boolean @default(false)\n createdAt DateTime @default(now())\n games Game[]\n dailyResults DailyResult[]\n}\n\nmodel Game {\n id String @id @default(uuid(7))\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n mode String // \"solo\" | \"multi\" | \"daily\" | \"blitz\"\n startArticle String\n targetArticle String\n path String // JSON array de titres\n clicks Int\n timeSeconds Float\n won Boolean @default(true)\n playedAt DateTime @default(now())\n\n @@index([userId])\n}\n\nmodel DailyPuzzle {\n id String @id @default(uuid(7))\n date String @unique // \"YYYY-MM-DD\"\n startArticle String\n targetArticle String\n results DailyResult[]\n}\n\nmodel Room {\n code String @id\n players Json @default(\"[]\")\n phase String @default(\"waiting\")\n round Int @default(0)\n totalRounds Int @default(3)\n maxPlayers Int @default(16)\n gameMode String @default(\"race\")\n startArticle String @default(\"\")\n targetArticle String @default(\"\")\n roundWinner String?\n countdownStart BigInt?\n roundStart BigInt?\n createdAt BigInt\n updatedAt DateTime @updatedAt\n}\n\nmodel DailyResult {\n id String @id @default(uuid(7))\n puzzleId String\n puzzle DailyPuzzle @relation(fields: [puzzleId], references: [id], onDelete: Cascade)\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n path String // JSON\n clicks Int\n timeSeconds Float\n won Boolean\n playedAt DateTime @default(now())\n\n @@unique([puzzleId, userId])\n @@index([puzzleId])\n}\n", + "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel User {\n id String @id @default(uuid(7))\n name String\n email String @unique\n password String\n banned Boolean @default(false)\n createdAt DateTime @default(now())\n games Game[]\n dailyResults DailyResult[]\n}\n\nmodel Game {\n id String @id @default(uuid(7))\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n mode String // \"solo\" | \"multi\" | \"daily\" | \"blitz\"\n startArticle String\n targetArticle String\n path String // JSON array de titres\n clicks Int\n timeSeconds Float\n won Boolean @default(true)\n playedAt DateTime @default(now())\n\n @@index([userId])\n}\n\nmodel DailyPuzzle {\n id String @id @default(uuid(7))\n date String @unique // \"YYYY-MM-DD\"\n startArticle String\n targetArticle String\n results DailyResult[]\n}\n\nmodel Room {\n code String @id\n players Json @default(\"[]\")\n phase String @default(\"waiting\")\n round Int @default(0)\n totalRounds Int @default(3)\n maxPlayers Int @default(16)\n gameMode String @default(\"race\")\n searchAllowed Boolean @default(false)\n startArticle String @default(\"\")\n targetArticle String @default(\"\")\n roundWinner String?\n countdownStart BigInt?\n roundStart BigInt?\n createdAt BigInt\n updatedAt DateTime @updatedAt\n}\n\nmodel DailyResult {\n id String @id @default(uuid(7))\n puzzleId String\n puzzle DailyPuzzle @relation(fields: [puzzleId], references: [id], onDelete: Cascade)\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n path String // JSON\n clicks Int\n timeSeconds Float\n won Boolean\n playedAt DateTime @default(now())\n\n @@unique([puzzleId, userId])\n @@index([puzzleId])\n}\n", "runtimeDataModel": { "models": {}, "enums": {}, @@ -32,10 +32,10 @@ const config: runtime.GetPrismaClientConfig = { } } -config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"banned\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"games\",\"kind\":\"object\",\"type\":\"Game\",\"relationName\":\"GameToUser\"},{\"name\":\"dailyResults\",\"kind\":\"object\",\"type\":\"DailyResult\",\"relationName\":\"DailyResultToUser\"}],\"dbName\":null},\"Game\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"GameToUser\"},{\"name\":\"mode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"clicks\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"timeSeconds\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"won\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"playedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"DailyPuzzle\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"results\",\"kind\":\"object\",\"type\":\"DailyResult\",\"relationName\":\"DailyPuzzleToDailyResult\"}],\"dbName\":null},\"Room\":{\"fields\":[{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"players\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"phase\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"round\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalRounds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxPlayers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"gameMode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roundWinner\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countdownStart\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"roundStart\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"DailyResult\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"puzzleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"puzzle\",\"kind\":\"object\",\"type\":\"DailyPuzzle\",\"relationName\":\"DailyPuzzleToDailyResult\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"DailyResultToUser\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"clicks\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"timeSeconds\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"won\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"playedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"banned\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"games\",\"kind\":\"object\",\"type\":\"Game\",\"relationName\":\"GameToUser\"},{\"name\":\"dailyResults\",\"kind\":\"object\",\"type\":\"DailyResult\",\"relationName\":\"DailyResultToUser\"}],\"dbName\":null},\"Game\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"GameToUser\"},{\"name\":\"mode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"clicks\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"timeSeconds\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"won\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"playedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"DailyPuzzle\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"results\",\"kind\":\"object\",\"type\":\"DailyResult\",\"relationName\":\"DailyPuzzleToDailyResult\"}],\"dbName\":null},\"Room\":{\"fields\":[{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"players\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"phase\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"round\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalRounds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxPlayers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"gameMode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"searchAllowed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"startArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetArticle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roundWinner\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countdownStart\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"roundStart\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"DailyResult\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"puzzleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"puzzle\",\"kind\":\"object\",\"type\":\"DailyPuzzle\",\"relationName\":\"DailyPuzzleToDailyResult\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"DailyResultToUser\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"clicks\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"timeSeconds\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"won\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"playedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") config.parameterizationSchema = { - strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"games\",\"results\",\"_count\",\"puzzle\",\"dailyResults\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Game.findUnique\",\"Game.findUniqueOrThrow\",\"Game.findFirst\",\"Game.findFirstOrThrow\",\"Game.findMany\",\"Game.createOne\",\"Game.createMany\",\"Game.createManyAndReturn\",\"Game.updateOne\",\"Game.updateMany\",\"Game.updateManyAndReturn\",\"Game.upsertOne\",\"Game.deleteOne\",\"Game.deleteMany\",\"_avg\",\"_sum\",\"Game.groupBy\",\"Game.aggregate\",\"DailyPuzzle.findUnique\",\"DailyPuzzle.findUniqueOrThrow\",\"DailyPuzzle.findFirst\",\"DailyPuzzle.findFirstOrThrow\",\"DailyPuzzle.findMany\",\"DailyPuzzle.createOne\",\"DailyPuzzle.createMany\",\"DailyPuzzle.createManyAndReturn\",\"DailyPuzzle.updateOne\",\"DailyPuzzle.updateMany\",\"DailyPuzzle.updateManyAndReturn\",\"DailyPuzzle.upsertOne\",\"DailyPuzzle.deleteOne\",\"DailyPuzzle.deleteMany\",\"DailyPuzzle.groupBy\",\"DailyPuzzle.aggregate\",\"Room.findUnique\",\"Room.findUniqueOrThrow\",\"Room.findFirst\",\"Room.findFirstOrThrow\",\"Room.findMany\",\"Room.createOne\",\"Room.createMany\",\"Room.createManyAndReturn\",\"Room.updateOne\",\"Room.updateMany\",\"Room.updateManyAndReturn\",\"Room.upsertOne\",\"Room.deleteOne\",\"Room.deleteMany\",\"Room.groupBy\",\"Room.aggregate\",\"DailyResult.findUnique\",\"DailyResult.findUniqueOrThrow\",\"DailyResult.findFirst\",\"DailyResult.findFirstOrThrow\",\"DailyResult.findMany\",\"DailyResult.createOne\",\"DailyResult.createMany\",\"DailyResult.createManyAndReturn\",\"DailyResult.updateOne\",\"DailyResult.updateMany\",\"DailyResult.updateManyAndReturn\",\"DailyResult.upsertOne\",\"DailyResult.deleteOne\",\"DailyResult.deleteMany\",\"DailyResult.groupBy\",\"DailyResult.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"puzzleId\",\"userId\",\"path\",\"clicks\",\"timeSeconds\",\"won\",\"playedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"code\",\"players\",\"phase\",\"round\",\"totalRounds\",\"maxPlayers\",\"gameMode\",\"startArticle\",\"targetArticle\",\"roundWinner\",\"countdownStart\",\"roundStart\",\"createdAt\",\"updatedAt\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"date\",\"every\",\"some\",\"none\",\"mode\",\"name\",\"email\",\"password\",\"banned\",\"puzzleId_userId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "mAIxUAsEAACxAQAgCAAArAEAIGEAAK8BADBiAAAQABBjAACvAQAwZAEAAAABgwFAAKkBACGQAQEAowEAIZEBAQAAAAGSAQEAowEAIZMBIACwAQAhAQAAAAEAIA4DAAC2AQAgYQAAtwEAMGIAAAMAEGMAALcBADBkAQCjAQAhZgEAowEAIWcBAKMBACFoAgClAQAhaQgAtAEAIWogALABACFrQACpAQAhfgEAowEAIX8BAKMBACGPAQEAowEAIQEDAACGAgAgDgMAALYBACBhAAC3AQAwYgAAAwAQYwAAtwEAMGQBAAAAAWYBAKMBACFnAQCjAQAhaAIApQEAIWkIALQBACFqIACwAQAha0AAqQEAIX4BAKMBACF_AQCjAQAhjwEBAKMBACEDAAAAAwAgAQAABAAwAgAABQAgDQMAALYBACAHAAC1AQAgYQAAswEAMGIAAAcAEGMAALMBADBkAQCjAQAhZQEAowEAIWYBAKMBACFnAQCjAQAhaAIApQEAIWkIALQBACFqIACwAQAha0AAqQEAIQIDAACGAgAgBwAAhQIAIA4DAAC2AQAgBwAAtQEAIGEAALMBADBiAAAHABBjAACzAQAwZAEAAAABZQEAowEAIWYBAKMBACFnAQCjAQAhaAIApQEAIWkIALQBACFqIACwAQAha0AAqQEAIZQBAACyAQAgAwAAAAcAIAEAAAgAMAIAAAkAIAMAAAAHACABAAAIADACAAAJACABAAAABwAgAQAAAAMAIAEAAAAHACABAAAAAQAgCwQAALEBACAIAACsAQAgYQAArwEAMGIAABAAEGMAAK8BADBkAQCjAQAhgwFAAKkBACGQAQEAowEAIZEBAQCjAQAhkgEBAKMBACGTASAAsAEAIQIEAACEAgAgCAAA4AEAIAMAAAAQACABAAARADACAAABACADAAAAEAAgAQAAEQAwAgAAAQAgAwAAABAAIAEAABEAMAIAAAEAIAgEAACCAgAgCAAAgwIAIGQBAAAAAYMBQAAAAAGQAQEAAAABkQEBAAAAAZIBAQAAAAGTASAAAAABAQ4AABUAIAZkAQAAAAGDAUAAAAABkAEBAAAAAZEBAQAAAAGSAQEAAAABkwEgAAAAAQEOAAAXADABDgAAFwAwCAQAAOsBACAIAADsAQAgZAEAvQEAIYMBQADBAQAhkAEBAL0BACGRAQEAvQEAIZIBAQC9AQAhkwEgAMABACECAAAAAQAgDgAAGgAgBmQBAL0BACGDAUAAwQEAIZABAQC9AQAhkQEBAL0BACGSAQEAvQEAIZMBIADAAQAhAgAAABAAIA4AABwAIAIAAAAQACAOAAAcACADAAAAAQAgFQAAFQAgFgAAGgAgAQAAAAEAIAEAAAAQACADBgAA6AEAIBsAAOoBACAcAADpAQAgCWEAAK4BADBiAAAjABBjAACuAQAwZAEAhQEAIYMBQACJAQAhkAEBAIUBACGRAQEAhQEAIZIBAQCFAQAhkwEgAIgBACEDAAAAEAAgAQAAIgAwGgAAIwAgAwAAABAAIAEAABEAMAIAAAEAIAEAAAAFACABAAAABQAgAwAAAAMAIAEAAAQAMAIAAAUAIAMAAAADACABAAAEADACAAAFACADAAAAAwAgAQAABAAwAgAABQAgCwMAAOcBACBkAQAAAAFmAQAAAAFnAQAAAAFoAgAAAAFpCAAAAAFqIAAAAAFrQAAAAAF-AQAAAAF_AQAAAAGPAQEAAAABAQ4AACsAIApkAQAAAAFmAQAAAAFnAQAAAAFoAgAAAAFpCAAAAAFqIAAAAAFrQAAAAAF-AQAAAAF_AQAAAAGPAQEAAAABAQ4AAC0AMAEOAAAtADALAwAA5gEAIGQBAL0BACFmAQC9AQAhZwEAvQEAIWgCAL4BACFpCAC_AQAhaiAAwAEAIWtAAMEBACF-AQC9AQAhfwEAvQEAIY8BAQC9AQAhAgAAAAUAIA4AADAAIApkAQC9AQAhZgEAvQEAIWcBAL0BACFoAgC-AQAhaQgAvwEAIWogAMABACFrQADBAQAhfgEAvQEAIX8BAL0BACGPAQEAvQEAIQIAAAADACAOAAAyACACAAAAAwAgDgAAMgAgAwAAAAUAIBUAACsAIBYAADAAIAEAAAAFACABAAAAAwAgBQYAAOEBACAbAADkAQAgHAAA4wEAIC0AAOIBACAuAADlAQAgDWEAAK0BADBiAAA5ABBjAACtAQAwZAEAhQEAIWYBAIUBACFnAQCFAQAhaAIAhgEAIWkIAIcBACFqIACIAQAha0AAiQEAIX4BAIUBACF_AQCFAQAhjwEBAIUBACEDAAAAAwAgAQAAOAAwGgAAOQAgAwAAAAMAIAEAAAQAMAIAAAUAIAgFAACsAQAgYQAAqwEAMGIAAD8AEGMAAKsBADBkAQAAAAF-AQCjAQAhfwEAowEAIYsBAQAAAAEBAAAAPAAgAQAAADwAIAgFAACsAQAgYQAAqwEAMGIAAD8AEGMAAKsBADBkAQCjAQAhfgEAowEAIX8BAKMBACGLAQEAowEAIQEFAADgAQAgAwAAAD8AIAEAAEAAMAIAADwAIAMAAAA_ACABAABAADACAAA8ACADAAAAPwAgAQAAQAAwAgAAPAAgBQUAAN8BACBkAQAAAAF-AQAAAAF_AQAAAAGLAQEAAAABAQ4AAEQAIARkAQAAAAF-AQAAAAF_AQAAAAGLAQEAAAABAQ4AAEYAMAEOAABGADAFBQAA0gEAIGQBAL0BACF-AQC9AQAhfwEAvQEAIYsBAQC9AQAhAgAAADwAIA4AAEkAIARkAQC9AQAhfgEAvQEAIX8BAL0BACGLAQEAvQEAIQIAAAA_ACAOAABLACACAAAAPwAgDgAASwAgAwAAADwAIBUAAEQAIBYAAEkAIAEAAAA8ACABAAAAPwAgAwYAAM8BACAbAADRAQAgHAAA0AEAIAdhAACqAQAwYgAAUgAQYwAAqgEAMGQBAIUBACF-AQCFAQAhfwEAhQEAIYsBAQCFAQAhAwAAAD8AIAEAAFEAMBoAAFIAIAMAAAA_ACABAABAADACAAA8ACARYQAAogEAMGIAAFgAEGMAAKIBADB3AQAAAAF4AACkAQAgeQEAowEAIXoCAKUBACF7AgClAQAhfAIApQEAIX0BAKMBACF-AQCjAQAhfwEAowEAIYABAQCmAQAhgQEEAKcBACGCAQQApwEAIYMBBACoAQAhhAFAAKkBACEBAAAAVQAgAQAAAFUAIBFhAACiAQAwYgAAWAAQYwAAogEAMHcBAKMBACF4AACkAQAgeQEAowEAIXoCAKUBACF7AgClAQAhfAIApQEAIX0BAKMBACF-AQCjAQAhfwEAowEAIYABAQCmAQAhgQEEAKcBACGCAQQApwEAIYMBBACoAQAhhAFAAKkBACEDgAEAAMYBACCBAQAAxgEAIIIBAADGAQAgAwAAAFgAIAEAAFkAMAIAAFUAIAMAAABYACABAABZADACAABVACADAAAAWAAgAQAAWQAwAgAAVQAgDncBAAAAAXiAAAAAAXkBAAAAAXoCAAAAAXsCAAAAAXwCAAAAAX0BAAAAAX4BAAAAAX8BAAAAAYABAQAAAAGBAQQAAAABggEEAAAAAYMBBAAAAAGEAUAAAAABAQ4AAF0AIA53AQAAAAF4gAAAAAF5AQAAAAF6AgAAAAF7AgAAAAF8AgAAAAF9AQAAAAF-AQAAAAF_AQAAAAGAAQEAAAABgQEEAAAAAYIBBAAAAAGDAQQAAAABhAFAAAAAAQEOAABfADABDgAAXwAwDncBAL0BACF4gAAAAAF5AQC9AQAhegIAvgEAIXsCAL4BACF8AgC-AQAhfQEAvQEAIX4BAL0BACF_AQC9AQAhgAEBAMwBACGBAQQAzQEAIYIBBADNAQAhgwEEAM4BACGEAUAAwQEAIQIAAABVACAOAABiACAOdwEAvQEAIXiAAAAAAXkBAL0BACF6AgC-AQAhewIAvgEAIXwCAL4BACF9AQC9AQAhfgEAvQEAIX8BAL0BACGAAQEAzAEAIYEBBADNAQAhggEEAM0BACGDAQQAzgEAIYQBQADBAQAhAgAAAFgAIA4AAGQAIAIAAABYACAOAABkACADAAAAVQAgFQAAXQAgFgAAYgAgAQAAAFUAIAEAAABYACAIBgAAxwEAIBsAAMoBACAcAADJAQAgLQAAyAEAIC4AAMsBACCAAQAAxgEAIIEBAADGAQAgggEAAMYBACARYQAAlAEAMGIAAGsAEGMAAJQBADB3AQCFAQAheAAAlQEAIHkBAIUBACF6AgCGAQAhewIAhgEAIXwCAIYBACF9AQCFAQAhfgEAhQEAIX8BAIUBACGAAQEAlgEAIYEBBACXAQAhggEEAJcBACGDAQQAmAEAIYQBQACJAQAhAwAAAFgAIAEAAGoAMBoAAGsAIAMAAABYACABAABZADACAABVACABAAAACQAgAQAAAAkAIAMAAAAHACABAAAIADACAAAJACADAAAABwAgAQAACAAwAgAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIAoDAADFAQAgBwAAxAEAIGQBAAAAAWUBAAAAAWYBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAQEOAABzACAIZAEAAAABZQEAAAABZgEAAAABZwEAAAABaAIAAAABaQgAAAABaiAAAAABa0AAAAABAQ4AAHUAMAEOAAB1ADAKAwAAwwEAIAcAAMIBACBkAQC9AQAhZQEAvQEAIWYBAL0BACFnAQC9AQAhaAIAvgEAIWkIAL8BACFqIADAAQAha0AAwQEAIQIAAAAJACAOAAB4ACAIZAEAvQEAIWUBAL0BACFmAQC9AQAhZwEAvQEAIWgCAL4BACFpCAC_AQAhaiAAwAEAIWtAAMEBACECAAAABwAgDgAAegAgAgAAAAcAIA4AAHoAIAMAAAAJACAVAABzACAWAAB4ACABAAAACQAgAQAAAAcAIAUGAAC4AQAgGwAAuwEAIBwAALoBACAtAAC5AQAgLgAAvAEAIAthAACEAQAwYgAAgQEAEGMAAIQBADBkAQCFAQAhZQEAhQEAIWYBAIUBACFnAQCFAQAhaAIAhgEAIWkIAIcBACFqIACIAQAha0AAiQEAIQMAAAAHACABAACAAQAwGgAAgQEAIAMAAAAHACABAAAIADACAAAJACALYQAAhAEAMGIAAIEBABBjAACEAQAwZAEAhQEAIWUBAIUBACFmAQCFAQAhZwEAhQEAIWgCAIYBACFpCACHAQAhaiAAiAEAIWtAAIkBACEOBgAAiwEAIBsAAJMBACAcAACTAQAgbAEAAAABbQEAAAAEbgEAAAAEbwEAAAABcAEAAAABcQEAAAABcgEAAAABcwEAkgEAIXQBAAAAAXUBAAAAAXYBAAAAAQ0GAACLAQAgGwAAiwEAIBwAAIsBACAtAACQAQAgLgAAiwEAIGwCAAAAAW0CAAAABG4CAAAABG8CAAAAAXACAAAAAXECAAAAAXICAAAAAXMCAJEBACENBgAAiwEAIBsAAJABACAcAACQAQAgLQAAkAEAIC4AAJABACBsCAAAAAFtCAAAAARuCAAAAARvCAAAAAFwCAAAAAFxCAAAAAFyCAAAAAFzCACPAQAhBQYAAIsBACAbAACOAQAgHAAAjgEAIGwgAAAAAXMgAI0BACELBgAAiwEAIBsAAIwBACAcAACMAQAgbEAAAAABbUAAAAAEbkAAAAAEb0AAAAABcEAAAAABcUAAAAABckAAAAABc0AAigEAIQsGAACLAQAgGwAAjAEAIBwAAIwBACBsQAAAAAFtQAAAAARuQAAAAARvQAAAAAFwQAAAAAFxQAAAAAFyQAAAAAFzQACKAQAhCGwCAAAAAW0CAAAABG4CAAAABG8CAAAAAXACAAAAAXECAAAAAXICAAAAAXMCAIsBACEIbEAAAAABbUAAAAAEbkAAAAAEb0AAAAABcEAAAAABcUAAAAABckAAAAABc0AAjAEAIQUGAACLAQAgGwAAjgEAIBwAAI4BACBsIAAAAAFzIACNAQAhAmwgAAAAAXMgAI4BACENBgAAiwEAIBsAAJABACAcAACQAQAgLQAAkAEAIC4AAJABACBsCAAAAAFtCAAAAARuCAAAAARvCAAAAAFwCAAAAAFxCAAAAAFyCAAAAAFzCACPAQAhCGwIAAAAAW0IAAAABG4IAAAABG8IAAAAAXAIAAAAAXEIAAAAAXIIAAAAAXMIAJABACENBgAAiwEAIBsAAIsBACAcAACLAQAgLQAAkAEAIC4AAIsBACBsAgAAAAFtAgAAAARuAgAAAARvAgAAAAFwAgAAAAFxAgAAAAFyAgAAAAFzAgCRAQAhDgYAAIsBACAbAACTAQAgHAAAkwEAIGwBAAAAAW0BAAAABG4BAAAABG8BAAAAAXABAAAAAXEBAAAAAXIBAAAAAXMBAJIBACF0AQAAAAF1AQAAAAF2AQAAAAELbAEAAAABbQEAAAAEbgEAAAAEbwEAAAABcAEAAAABcQEAAAABcgEAAAABcwEAkwEAIXQBAAAAAXUBAAAAAXYBAAAAARFhAACUAQAwYgAAawAQYwAAlAEAMHcBAIUBACF4AACVAQAgeQEAhQEAIXoCAIYBACF7AgCGAQAhfAIAhgEAIX0BAIUBACF-AQCFAQAhfwEAhQEAIYABAQCWAQAhgQEEAJcBACGCAQQAlwEAIYMBBACYAQAhhAFAAIkBACEPBgAAiwEAIBsAAKEBACAcAAChAQAgbIAAAAABb4AAAAABcIAAAAABcYAAAAABcoAAAAABc4AAAAABhQEBAAAAAYYBAQAAAAGHAQEAAAABiAGAAAAAAYkBgAAAAAGKAYAAAAABDgYAAJwBACAbAACgAQAgHAAAoAEAIGwBAAAAAW0BAAAABW4BAAAABW8BAAAAAXABAAAAAXEBAAAAAXIBAAAAAXMBAJ8BACF0AQAAAAF1AQAAAAF2AQAAAAENBgAAnAEAIBsAAJ4BACAcAACeAQAgLQAAnQEAIC4AAJ4BACBsBAAAAAFtBAAAAAVuBAAAAAVvBAAAAAFwBAAAAAFxBAAAAAFyBAAAAAFzBACbAQAhDQYAAIsBACAbAACaAQAgHAAAmgEAIC0AAJABACAuAACaAQAgbAQAAAABbQQAAAAEbgQAAAAEbwQAAAABcAQAAAABcQQAAAABcgQAAAABcwQAmQEAIQ0GAACLAQAgGwAAmgEAIBwAAJoBACAtAACQAQAgLgAAmgEAIGwEAAAAAW0EAAAABG4EAAAABG8EAAAAAXAEAAAAAXEEAAAAAXIEAAAAAXMEAJkBACEIbAQAAAABbQQAAAAEbgQAAAAEbwQAAAABcAQAAAABcQQAAAABcgQAAAABcwQAmgEAIQ0GAACcAQAgGwAAngEAIBwAAJ4BACAtAACdAQAgLgAAngEAIGwEAAAAAW0EAAAABW4EAAAABW8EAAAAAXAEAAAAAXEEAAAAAXIEAAAAAXMEAJsBACEIbAIAAAABbQIAAAAFbgIAAAAFbwIAAAABcAIAAAABcQIAAAABcgIAAAABcwIAnAEAIQhsCAAAAAFtCAAAAAVuCAAAAAVvCAAAAAFwCAAAAAFxCAAAAAFyCAAAAAFzCACdAQAhCGwEAAAAAW0EAAAABW4EAAAABW8EAAAAAXAEAAAAAXEEAAAAAXIEAAAAAXMEAJ4BACEOBgAAnAEAIBsAAKABACAcAACgAQAgbAEAAAABbQEAAAAFbgEAAAAFbwEAAAABcAEAAAABcQEAAAABcgEAAAABcwEAnwEAIXQBAAAAAXUBAAAAAXYBAAAAAQtsAQAAAAFtAQAAAAVuAQAAAAVvAQAAAAFwAQAAAAFxAQAAAAFyAQAAAAFzAQCgAQAhdAEAAAABdQEAAAABdgEAAAABDGyAAAAAAW-AAAAAAXCAAAAAAXGAAAAAAXKAAAAAAXOAAAAAAYUBAQAAAAGGAQEAAAABhwEBAAAAAYgBgAAAAAGJAYAAAAABigGAAAAAARFhAACiAQAwYgAAWAAQYwAAogEAMHcBAKMBACF4AACkAQAgeQEAowEAIXoCAKUBACF7AgClAQAhfAIApQEAIX0BAKMBACF-AQCjAQAhfwEAowEAIYABAQCmAQAhgQEEAKcBACGCAQQApwEAIYMBBACoAQAhhAFAAKkBACELbAEAAAABbQEAAAAEbgEAAAAEbwEAAAABcAEAAAABcQEAAAABcgEAAAABcwEAkwEAIXQBAAAAAXUBAAAAAXYBAAAAAQxsgAAAAAFvgAAAAAFwgAAAAAFxgAAAAAFygAAAAAFzgAAAAAGFAQEAAAABhgEBAAAAAYcBAQAAAAGIAYAAAAABiQGAAAAAAYoBgAAAAAEIbAIAAAABbQIAAAAEbgIAAAAEbwIAAAABcAIAAAABcQIAAAABcgIAAAABcwIAiwEAIQtsAQAAAAFtAQAAAAVuAQAAAAVvAQAAAAFwAQAAAAFxAQAAAAFyAQAAAAFzAQCgAQAhdAEAAAABdQEAAAABdgEAAAABCGwEAAAAAW0EAAAABW4EAAAABW8EAAAAAXAEAAAAAXEEAAAAAXIEAAAAAXMEAJ4BACEIbAQAAAABbQQAAAAEbgQAAAAEbwQAAAABcAQAAAABcQQAAAABcgQAAAABcwQAmgEAIQhsQAAAAAFtQAAAAARuQAAAAARvQAAAAAFwQAAAAAFxQAAAAAFyQAAAAAFzQACMAQAhB2EAAKoBADBiAABSABBjAACqAQAwZAEAhQEAIX4BAIUBACF_AQCFAQAhiwEBAIUBACEIBQAArAEAIGEAAKsBADBiAAA_ABBjAACrAQAwZAEAowEAIX4BAKMBACF_AQCjAQAhiwEBAKMBACEDjAEAAAcAII0BAAAHACCOAQAABwAgDWEAAK0BADBiAAA5ABBjAACtAQAwZAEAhQEAIWYBAIUBACFnAQCFAQAhaAIAhgEAIWkIAIcBACFqIACIAQAha0AAiQEAIX4BAIUBACF_AQCFAQAhjwEBAIUBACEJYQAArgEAMGIAACMAEGMAAK4BADBkAQCFAQAhgwFAAIkBACGQAQEAhQEAIZEBAQCFAQAhkgEBAIUBACGTASAAiAEAIQsEAACxAQAgCAAArAEAIGEAAK8BADBiAAAQABBjAACvAQAwZAEAowEAIYMBQACpAQAhkAEBAKMBACGRAQEAowEAIZIBAQCjAQAhkwEgALABACECbCAAAAABcyAAjgEAIQOMAQAAAwAgjQEAAAMAII4BAAADACACZQEAAAABZgEAAAABDQMAALYBACAHAAC1AQAgYQAAswEAMGIAAAcAEGMAALMBADBkAQCjAQAhZQEAowEAIWYBAKMBACFnAQCjAQAhaAIApQEAIWkIALQBACFqIACwAQAha0AAqQEAIQhsCAAAAAFtCAAAAARuCAAAAARvCAAAAAFwCAAAAAFxCAAAAAFyCAAAAAFzCACQAQAhCgUAAKwBACBhAACrAQAwYgAAPwAQYwAAqwEAMGQBAKMBACF-AQCjAQAhfwEAowEAIYsBAQCjAQAhlQEAAD8AIJYBAAA_ACANBAAAsQEAIAgAAKwBACBhAACvAQAwYgAAEAAQYwAArwEAMGQBAKMBACGDAUAAqQEAIZABAQCjAQAhkQEBAKMBACGSAQEAowEAIZMBIACwAQAhlQEAABAAIJYBAAAQACAOAwAAtgEAIGEAALcBADBiAAADABBjAAC3AQAwZAEAowEAIWYBAKMBACFnAQCjAQAhaAIApQEAIWkIALQBACFqIACwAQAha0AAqQEAIX4BAKMBACF_AQCjAQAhjwEBAKMBACEAAAAAAAGaAQEAAAABBZoBAgAAAAGgAQIAAAABoQECAAAAAaIBAgAAAAGjAQIAAAABBZoBCAAAAAGgAQgAAAABoQEIAAAAAaIBCAAAAAGjAQgAAAABAZoBIAAAAAEBmgFAAAAAAQUVAACRAgAgFgAAlwIAIJcBAACSAgAgmAEAAJYCACCdAQAAPAAgBRUAAI8CACAWAACUAgAglwEAAJACACCYAQAAkwIAIJ0BAAABACADFQAAkQIAIJcBAACSAgAgnQEAADwAIAMVAACPAgAglwEAAJACACCdAQAAAQAgAAAAAAAAAZoBAQAAAAEFmgEEAAAAAaABBAAAAAGhAQQAAAABogEEAAAAAaMBBAAAAAEFmgEEAAAAAaABBAAAAAGhAQQAAAABogEEAAAAAaMBBAAAAAEAAAALFQAA0wEAMBYAANgBADCXAQAA1AEAMJgBAADVAQAwmQEAANYBACCaAQAA1wEAMJsBAADXAQAwnAEAANcBADCdAQAA1wEAMJ4BAADZAQAwnwEAANoBADAIAwAAxQEAIGQBAAAAAWYBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAQIAAAAJACAVAADeAQAgAwAAAAkAIBUAAN4BACAWAADdAQAgAQ4AAI4CADAOAwAAtgEAIAcAALUBACBhAACzAQAwYgAABwAQYwAAswEAMGQBAAAAAWUBAKMBACFmAQCjAQAhZwEAowEAIWgCAKUBACFpCAC0AQAhaiAAsAEAIWtAAKkBACGUAQAAsgEAIAIAAAAJACAOAADdAQAgAgAAANsBACAOAADcAQAgC2EAANoBADBiAADbAQAQYwAA2gEAMGQBAKMBACFlAQCjAQAhZgEAowEAIWcBAKMBACFoAgClAQAhaQgAtAEAIWogALABACFrQACpAQAhC2EAANoBADBiAADbAQAQYwAA2gEAMGQBAKMBACFlAQCjAQAhZgEAowEAIWcBAKMBACFoAgClAQAhaQgAtAEAIWogALABACFrQACpAQAhB2QBAL0BACFmAQC9AQAhZwEAvQEAIWgCAL4BACFpCAC_AQAhaiAAwAEAIWtAAMEBACEIAwAAwwEAIGQBAL0BACFmAQC9AQAhZwEAvQEAIWgCAL4BACFpCAC_AQAhaiAAwAEAIWtAAMEBACEIAwAAxQEAIGQBAAAAAWYBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAQQVAADTAQAwlwEAANQBADCZAQAA1gEAIJ0BAADXAQAwAAAAAAAABRUAAIkCACAWAACMAgAglwEAAIoCACCYAQAAiwIAIJ0BAAABACADFQAAiQIAIJcBAACKAgAgnQEAAAEAIAAAAAsVAAD2AQAwFgAA-wEAMJcBAAD3AQAwmAEAAPgBADCZAQAA-QEAIJoBAAD6AQAwmwEAAPoBADCcAQAA-gEAMJ0BAAD6AQAwngEAAPwBADCfAQAA_QEAMAsVAADtAQAwFgAA8QEAMJcBAADuAQAwmAEAAO8BADCZAQAA8AEAIJoBAADXAQAwmwEAANcBADCcAQAA1wEAMJ0BAADXAQAwngEAAPIBADCfAQAA2gEAMAgHAADEAQAgZAEAAAABZQEAAAABZwEAAAABaAIAAAABaQgAAAABaiAAAAABa0AAAAABAgAAAAkAIBUAAPUBACADAAAACQAgFQAA9QEAIBYAAPQBACABDgAAiAIAMAIAAAAJACAOAAD0AQAgAgAAANsBACAOAADzAQAgB2QBAL0BACFlAQC9AQAhZwEAvQEAIWgCAL4BACFpCAC_AQAhaiAAwAEAIWtAAMEBACEIBwAAwgEAIGQBAL0BACFlAQC9AQAhZwEAvQEAIWgCAL4BACFpCAC_AQAhaiAAwAEAIWtAAMEBACEIBwAAxAEAIGQBAAAAAWUBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAQlkAQAAAAFnAQAAAAFoAgAAAAFpCAAAAAFqIAAAAAFrQAAAAAF-AQAAAAF_AQAAAAGPAQEAAAABAgAAAAUAIBUAAIECACADAAAABQAgFQAAgQIAIBYAAIACACABDgAAhwIAMA4DAAC2AQAgYQAAtwEAMGIAAAMAEGMAALcBADBkAQAAAAFmAQCjAQAhZwEAowEAIWgCAKUBACFpCAC0AQAhaiAAsAEAIWtAAKkBACF-AQCjAQAhfwEAowEAIY8BAQCjAQAhAgAAAAUAIA4AAIACACACAAAA_gEAIA4AAP8BACANYQAA_QEAMGIAAP4BABBjAAD9AQAwZAEAowEAIWYBAKMBACFnAQCjAQAhaAIApQEAIWkIALQBACFqIACwAQAha0AAqQEAIX4BAKMBACF_AQCjAQAhjwEBAKMBACENYQAA_QEAMGIAAP4BABBjAAD9AQAwZAEAowEAIWYBAKMBACFnAQCjAQAhaAIApQEAIWkIALQBACFqIACwAQAha0AAqQEAIX4BAKMBACF_AQCjAQAhjwEBAKMBACEJZAEAvQEAIWcBAL0BACFoAgC-AQAhaQgAvwEAIWogAMABACFrQADBAQAhfgEAvQEAIX8BAL0BACGPAQEAvQEAIQlkAQC9AQAhZwEAvQEAIWgCAL4BACFpCAC_AQAhaiAAwAEAIWtAAMEBACF-AQC9AQAhfwEAvQEAIY8BAQC9AQAhCWQBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAX4BAAAAAX8BAAAAAY8BAQAAAAEEFQAA9gEAMJcBAAD3AQAwmQEAAPkBACCdAQAA-gEAMAQVAADtAQAwlwEAAO4BADCZAQAA8AEAIJ0BAADXAQAwAAEFAADgAQAgAgQAAIQCACAIAADgAQAgCWQBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAX4BAAAAAX8BAAAAAY8BAQAAAAEHZAEAAAABZQEAAAABZwEAAAABaAIAAAABaQgAAAABaiAAAAABa0AAAAABBwgAAIMCACBkAQAAAAGDAUAAAAABkAEBAAAAAZEBAQAAAAGSAQEAAAABkwEgAAAAAQIAAAABACAVAACJAgAgAwAAABAAIBUAAIkCACAWAACNAgAgCQAAABAAIAgAAOwBACAOAACNAgAgZAEAvQEAIYMBQADBAQAhkAEBAL0BACGRAQEAvQEAIZIBAQC9AQAhkwEgAMABACEHCAAA7AEAIGQBAL0BACGDAUAAwQEAIZABAQC9AQAhkQEBAL0BACGSAQEAvQEAIZMBIADAAQAhB2QBAAAAAWYBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAQcEAACCAgAgZAEAAAABgwFAAAAAAZABAQAAAAGRAQEAAAABkgEBAAAAAZMBIAAAAAECAAAAAQAgFQAAjwIAIARkAQAAAAF-AQAAAAF_AQAAAAGLAQEAAAABAgAAADwAIBUAAJECACADAAAAEAAgFQAAjwIAIBYAAJUCACAJAAAAEAAgBAAA6wEAIA4AAJUCACBkAQC9AQAhgwFAAMEBACGQAQEAvQEAIZEBAQC9AQAhkgEBAL0BACGTASAAwAEAIQcEAADrAQAgZAEAvQEAIYMBQADBAQAhkAEBAL0BACGRAQEAvQEAIZIBAQC9AQAhkwEgAMABACEDAAAAPwAgFQAAkQIAIBYAAJgCACAGAAAAPwAgDgAAmAIAIGQBAL0BACF-AQC9AQAhfwEAvQEAIYsBAQC9AQAhBGQBAL0BACF-AQC9AQAhfwEAvQEAIYsBAQC9AQAhAwQGAgYABggKAwEDAAECAwABBwAEAgULAwYABQEFDAACBA0ACA4AAAAAAwYACxsADBwADQAAAAMGAAsbAAwcAA0BAwABAQMAAQUGABIbABUcABYtABMuABQAAAAAAAUGABIbABUcABYtABMuABQAAAMGABsbABwcAB0AAAADBgAbGwAcHAAdAAAABQYAIxsAJhwAJy0AJC4AJQAAAAAABQYAIxsAJhwAJy0AJC4AJQIDAAEHAAQCAwABBwAEBQYALBsALxwAMC0ALS4ALgAAAAAABQYALBsALxwAMC0ALS4ALgkCAQoPAQsSAQwTAQ0UAQ8WARAYBxEZCBIbARMdBxQeCRcfARggARkhBx0kCh4lDh8mAiAnAiEoAiIpAiMqAiQsAiUuByYvDycxAigzByk0ECo1Ais2Aiw3By86ETA7FzE9BDI-BDNBBDRCBDVDBDZFBDdHBzhIGDlKBDpMBztNGTxOBD1PBD5QBz9TGkBUHkFWH0JXH0NaH0RbH0VcH0ZeH0dgB0hhIEljH0plB0tmIUxnH01oH05pB09sIlBtKFFuA1JvA1NwA1RxA1VyA1Z0A1d2B1h3KVl5A1p7B1t8Klx9A11-A15_B1-CAStggwEx" + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"games\",\"results\",\"_count\",\"puzzle\",\"dailyResults\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Game.findUnique\",\"Game.findUniqueOrThrow\",\"Game.findFirst\",\"Game.findFirstOrThrow\",\"Game.findMany\",\"Game.createOne\",\"Game.createMany\",\"Game.createManyAndReturn\",\"Game.updateOne\",\"Game.updateMany\",\"Game.updateManyAndReturn\",\"Game.upsertOne\",\"Game.deleteOne\",\"Game.deleteMany\",\"_avg\",\"_sum\",\"Game.groupBy\",\"Game.aggregate\",\"DailyPuzzle.findUnique\",\"DailyPuzzle.findUniqueOrThrow\",\"DailyPuzzle.findFirst\",\"DailyPuzzle.findFirstOrThrow\",\"DailyPuzzle.findMany\",\"DailyPuzzle.createOne\",\"DailyPuzzle.createMany\",\"DailyPuzzle.createManyAndReturn\",\"DailyPuzzle.updateOne\",\"DailyPuzzle.updateMany\",\"DailyPuzzle.updateManyAndReturn\",\"DailyPuzzle.upsertOne\",\"DailyPuzzle.deleteOne\",\"DailyPuzzle.deleteMany\",\"DailyPuzzle.groupBy\",\"DailyPuzzle.aggregate\",\"Room.findUnique\",\"Room.findUniqueOrThrow\",\"Room.findFirst\",\"Room.findFirstOrThrow\",\"Room.findMany\",\"Room.createOne\",\"Room.createMany\",\"Room.createManyAndReturn\",\"Room.updateOne\",\"Room.updateMany\",\"Room.updateManyAndReturn\",\"Room.upsertOne\",\"Room.deleteOne\",\"Room.deleteMany\",\"Room.groupBy\",\"Room.aggregate\",\"DailyResult.findUnique\",\"DailyResult.findUniqueOrThrow\",\"DailyResult.findFirst\",\"DailyResult.findFirstOrThrow\",\"DailyResult.findMany\",\"DailyResult.createOne\",\"DailyResult.createMany\",\"DailyResult.createManyAndReturn\",\"DailyResult.updateOne\",\"DailyResult.updateMany\",\"DailyResult.updateManyAndReturn\",\"DailyResult.upsertOne\",\"DailyResult.deleteOne\",\"DailyResult.deleteMany\",\"DailyResult.groupBy\",\"DailyResult.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"puzzleId\",\"userId\",\"path\",\"clicks\",\"timeSeconds\",\"won\",\"playedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"code\",\"players\",\"phase\",\"round\",\"totalRounds\",\"maxPlayers\",\"gameMode\",\"searchAllowed\",\"startArticle\",\"targetArticle\",\"roundWinner\",\"countdownStart\",\"roundStart\",\"createdAt\",\"updatedAt\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"date\",\"every\",\"some\",\"none\",\"mode\",\"name\",\"email\",\"password\",\"banned\",\"puzzleId_userId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "mAIxUAsEAACxAQAgCAAArQEAIGEAALABADBiAAAQABBjAACwAQAwZAEAAAABhAFAAKoBACGRAQEAowEAIZIBAQAAAAGTAQEAowEAIZQBIACmAQAhAQAAAAEAIA4DAAC2AQAgYQAAtwEAMGIAAAMAEGMAALcBADBkAQCjAQAhZgEAowEAIWcBAKMBACFoAgClAQAhaQgAtAEAIWogAKYBACFrQACqAQAhfwEAowEAIYABAQCjAQAhkAEBAKMBACEBAwAAhgIAIA4DAAC2AQAgYQAAtwEAMGIAAAMAEGMAALcBADBkAQAAAAFmAQCjAQAhZwEAowEAIWgCAKUBACFpCAC0AQAhaiAApgEAIWtAAKoBACF_AQCjAQAhgAEBAKMBACGQAQEAowEAIQMAAAADACABAAAEADACAAAFACANAwAAtgEAIAcAALUBACBhAACzAQAwYgAABwAQYwAAswEAMGQBAKMBACFlAQCjAQAhZgEAowEAIWcBAKMBACFoAgClAQAhaQgAtAEAIWogAKYBACFrQACqAQAhAgMAAIYCACAHAACFAgAgDgMAALYBACAHAAC1AQAgYQAAswEAMGIAAAcAEGMAALMBADBkAQAAAAFlAQCjAQAhZgEAowEAIWcBAKMBACFoAgClAQAhaQgAtAEAIWogAKYBACFrQACqAQAhlQEAALIBACADAAAABwAgAQAACAAwAgAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIAEAAAAHACABAAAAAwAgAQAAAAcAIAEAAAABACALBAAAsQEAIAgAAK0BACBhAACwAQAwYgAAEAAQYwAAsAEAMGQBAKMBACGEAUAAqgEAIZEBAQCjAQAhkgEBAKMBACGTAQEAowEAIZQBIACmAQAhAgQAAIQCACAIAADgAQAgAwAAABAAIAEAABEAMAIAAAEAIAMAAAAQACABAAARADACAAABACADAAAAEAAgAQAAEQAwAgAAAQAgCAQAAIICACAIAACDAgAgZAEAAAABhAFAAAAAAZEBAQAAAAGSAQEAAAABkwEBAAAAAZQBIAAAAAEBDgAAFQAgBmQBAAAAAYQBQAAAAAGRAQEAAAABkgEBAAAAAZMBAQAAAAGUASAAAAABAQ4AABcAMAEOAAAXADAIBAAA6wEAIAgAAOwBACBkAQC9AQAhhAFAAMEBACGRAQEAvQEAIZIBAQC9AQAhkwEBAL0BACGUASAAwAEAIQIAAAABACAOAAAaACAGZAEAvQEAIYQBQADBAQAhkQEBAL0BACGSAQEAvQEAIZMBAQC9AQAhlAEgAMABACECAAAAEAAgDgAAHAAgAgAAABAAIA4AABwAIAMAAAABACAVAAAVACAWAAAaACABAAAAAQAgAQAAABAAIAMGAADoAQAgGwAA6gEAIBwAAOkBACAJYQAArwEAMGIAACMAEGMAAK8BADBkAQCFAQAhhAFAAIkBACGRAQEAhQEAIZIBAQCFAQAhkwEBAIUBACGUASAAiAEAIQMAAAAQACABAAAiADAaAAAjACADAAAAEAAgAQAAEQAwAgAAAQAgAQAAAAUAIAEAAAAFACADAAAAAwAgAQAABAAwAgAABQAgAwAAAAMAIAEAAAQAMAIAAAUAIAMAAAADACABAAAEADACAAAFACALAwAA5wEAIGQBAAAAAWYBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAX8BAAAAAYABAQAAAAGQAQEAAAABAQ4AACsAIApkAQAAAAFmAQAAAAFnAQAAAAFoAgAAAAFpCAAAAAFqIAAAAAFrQAAAAAF_AQAAAAGAAQEAAAABkAEBAAAAAQEOAAAtADABDgAALQAwCwMAAOYBACBkAQC9AQAhZgEAvQEAIWcBAL0BACFoAgC-AQAhaQgAvwEAIWogAMABACFrQADBAQAhfwEAvQEAIYABAQC9AQAhkAEBAL0BACECAAAABQAgDgAAMAAgCmQBAL0BACFmAQC9AQAhZwEAvQEAIWgCAL4BACFpCAC_AQAhaiAAwAEAIWtAAMEBACF_AQC9AQAhgAEBAL0BACGQAQEAvQEAIQIAAAADACAOAAAyACACAAAAAwAgDgAAMgAgAwAAAAUAIBUAACsAIBYAADAAIAEAAAAFACABAAAAAwAgBQYAAOEBACAbAADkAQAgHAAA4wEAIC0AAOIBACAuAADlAQAgDWEAAK4BADBiAAA5ABBjAACuAQAwZAEAhQEAIWYBAIUBACFnAQCFAQAhaAIAhgEAIWkIAIcBACFqIACIAQAha0AAiQEAIX8BAIUBACGAAQEAhQEAIZABAQCFAQAhAwAAAAMAIAEAADgAMBoAADkAIAMAAAADACABAAAEADACAAAFACAIBQAArQEAIGEAAKwBADBiAAA_ABBjAACsAQAwZAEAAAABfwEAowEAIYABAQCjAQAhjAEBAAAAAQEAAAA8ACABAAAAPAAgCAUAAK0BACBhAACsAQAwYgAAPwAQYwAArAEAMGQBAKMBACF_AQCjAQAhgAEBAKMBACGMAQEAowEAIQEFAADgAQAgAwAAAD8AIAEAAEAAMAIAADwAIAMAAAA_ACABAABAADACAAA8ACADAAAAPwAgAQAAQAAwAgAAPAAgBQUAAN8BACBkAQAAAAF_AQAAAAGAAQEAAAABjAEBAAAAAQEOAABEACAEZAEAAAABfwEAAAABgAEBAAAAAYwBAQAAAAEBDgAARgAwAQ4AAEYAMAUFAADSAQAgZAEAvQEAIX8BAL0BACGAAQEAvQEAIYwBAQC9AQAhAgAAADwAIA4AAEkAIARkAQC9AQAhfwEAvQEAIYABAQC9AQAhjAEBAL0BACECAAAAPwAgDgAASwAgAgAAAD8AIA4AAEsAIAMAAAA8ACAVAABEACAWAABJACABAAAAPAAgAQAAAD8AIAMGAADPAQAgGwAA0QEAIBwAANABACAHYQAAqwEAMGIAAFIAEGMAAKsBADBkAQCFAQAhfwEAhQEAIYABAQCFAQAhjAEBAIUBACEDAAAAPwAgAQAAUQAwGgAAUgAgAwAAAD8AIAEAAEAAMAIAADwAIBJhAACiAQAwYgAAWAAQYwAAogEAMHcBAAAAAXgAAKQBACB5AQCjAQAhegIApQEAIXsCAKUBACF8AgClAQAhfQEAowEAIX4gAKYBACF_AQCjAQAhgAEBAKMBACGBAQEApwEAIYIBBACoAQAhgwEEAKgBACGEAQQAqQEAIYUBQACqAQAhAQAAAFUAIAEAAABVACASYQAAogEAMGIAAFgAEGMAAKIBADB3AQCjAQAheAAApAEAIHkBAKMBACF6AgClAQAhewIApQEAIXwCAKUBACF9AQCjAQAhfiAApgEAIX8BAKMBACGAAQEAowEAIYEBAQCnAQAhggEEAKgBACGDAQQAqAEAIYQBBACpAQAhhQFAAKoBACEDgQEAAMYBACCCAQAAxgEAIIMBAADGAQAgAwAAAFgAIAEAAFkAMAIAAFUAIAMAAABYACABAABZADACAABVACADAAAAWAAgAQAAWQAwAgAAVQAgD3cBAAAAAXiAAAAAAXkBAAAAAXoCAAAAAXsCAAAAAXwCAAAAAX0BAAAAAX4gAAAAAX8BAAAAAYABAQAAAAGBAQEAAAABggEEAAAAAYMBBAAAAAGEAQQAAAABhQFAAAAAAQEOAABdACAPdwEAAAABeIAAAAABeQEAAAABegIAAAABewIAAAABfAIAAAABfQEAAAABfiAAAAABfwEAAAABgAEBAAAAAYEBAQAAAAGCAQQAAAABgwEEAAAAAYQBBAAAAAGFAUAAAAABAQ4AAF8AMAEOAABfADAPdwEAvQEAIXiAAAAAAXkBAL0BACF6AgC-AQAhewIAvgEAIXwCAL4BACF9AQC9AQAhfiAAwAEAIX8BAL0BACGAAQEAvQEAIYEBAQDMAQAhggEEAM0BACGDAQQAzQEAIYQBBADOAQAhhQFAAMEBACECAAAAVQAgDgAAYgAgD3cBAL0BACF4gAAAAAF5AQC9AQAhegIAvgEAIXsCAL4BACF8AgC-AQAhfQEAvQEAIX4gAMABACF_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_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_ABBjAACsAQAwZAEAowEAIX8BAKMBACGAAQEAowEAIYwBAQCjAQAhA40BAAAHACCOAQAABwAgjwEAAAcAIA1hAACuAQAwYgAAOQAQYwAArgEAMGQBAIUBACFmAQCFAQAhZwEAhQEAIWgCAIYBACFpCACHAQAhaiAAiAEAIWtAAIkBACF_AQCFAQAhgAEBAIUBACGQAQEAhQEAIQlhAACvAQAwYgAAIwAQYwAArwEAMGQBAIUBACGEAUAAiQEAIZEBAQCFAQAhkgEBAIUBACGTAQEAhQEAIZQBIACIAQAhCwQAALEBACAIAACtAQAgYQAAsAEAMGIAABAAEGMAALABADBkAQCjAQAhhAFAAKoBACGRAQEAowEAIZIBAQCjAQAhkwEBAKMBACGUASAApgEAIQONAQAAAwAgjgEAAAMAII8BAAADACACZQEAAAABZgEAAAABDQMAALYBACAHAAC1AQAgYQAAswEAMGIAAAcAEGMAALMBADBkAQCjAQAhZQEAowEAIWYBAKMBACFnAQCjAQAhaAIApQEAIWkIALQBACFqIACmAQAha0AAqgEAIQhsCAAAAAFtCAAAAARuCAAAAARvCAAAAAFwCAAAAAFxCAAAAAFyCAAAAAFzCACQAQAhCgUAAK0BACBhAACsAQAwYgAAPwAQYwAArAEAMGQBAKMBACF_AQCjAQAhgAEBAKMBACGMAQEAowEAIZYBAAA_ACCXAQAAPwAgDQQAALEBACAIAACtAQAgYQAAsAEAMGIAABAAEGMAALABADBkAQCjAQAhhAFAAKoBACGRAQEAowEAIZIBAQCjAQAhkwEBAKMBACGUASAApgEAIZYBAAAQACCXAQAAEAAgDgMAALYBACBhAAC3AQAwYgAAAwAQYwAAtwEAMGQBAKMBACFmAQCjAQAhZwEAowEAIWgCAKUBACFpCAC0AQAhaiAApgEAIWtAAKoBACF_AQCjAQAhgAEBAKMBACGQAQEAowEAIQAAAAAAAZsBAQAAAAEFmwECAAAAAaEBAgAAAAGiAQIAAAABowECAAAAAaQBAgAAAAEFmwEIAAAAAaEBCAAAAAGiAQgAAAABowEIAAAAAaQBCAAAAAEBmwEgAAAAAQGbAUAAAAABBRUAAJECACAWAACXAgAgmAEAAJICACCZAQAAlgIAIJ4BAAA8ACAFFQAAjwIAIBYAAJQCACCYAQAAkAIAIJkBAACTAgAgngEAAAEAIAMVAACRAgAgmAEAAJICACCeAQAAPAAgAxUAAI8CACCYAQAAkAIAIJ4BAAABACAAAAAAAAABmwEBAAAAAQWbAQQAAAABoQEEAAAAAaIBBAAAAAGjAQQAAAABpAEEAAAAAQWbAQQAAAABoQEEAAAAAaIBBAAAAAGjAQQAAAABpAEEAAAAAQAAAAsVAADTAQAwFgAA2AEAMJgBAADUAQAwmQEAANUBADCaAQAA1gEAIJsBAADXAQAwnAEAANcBADCdAQAA1wEAMJ4BAADXAQAwnwEAANkBADCgAQAA2gEAMAgDAADFAQAgZAEAAAABZgEAAAABZwEAAAABaAIAAAABaQgAAAABaiAAAAABa0AAAAABAgAAAAkAIBUAAN4BACADAAAACQAgFQAA3gEAIBYAAN0BACABDgAAjgIAMA4DAAC2AQAgBwAAtQEAIGEAALMBADBiAAAHABBjAACzAQAwZAEAAAABZQEAowEAIWYBAKMBACFnAQCjAQAhaAIApQEAIWkIALQBACFqIACmAQAha0AAqgEAIZUBAACyAQAgAgAAAAkAIA4AAN0BACACAAAA2wEAIA4AANwBACALYQAA2gEAMGIAANsBABBjAADaAQAwZAEAowEAIWUBAKMBACFmAQCjAQAhZwEAowEAIWgCAKUBACFpCAC0AQAhaiAApgEAIWtAAKoBACELYQAA2gEAMGIAANsBABBjAADaAQAwZAEAowEAIWUBAKMBACFmAQCjAQAhZwEAowEAIWgCAKUBACFpCAC0AQAhaiAApgEAIWtAAKoBACEHZAEAvQEAIWYBAL0BACFnAQC9AQAhaAIAvgEAIWkIAL8BACFqIADAAQAha0AAwQEAIQgDAADDAQAgZAEAvQEAIWYBAL0BACFnAQC9AQAhaAIAvgEAIWkIAL8BACFqIADAAQAha0AAwQEAIQgDAADFAQAgZAEAAAABZgEAAAABZwEAAAABaAIAAAABaQgAAAABaiAAAAABa0AAAAABBBUAANMBADCYAQAA1AEAMJoBAADWAQAgngEAANcBADAAAAAAAAAFFQAAiQIAIBYAAIwCACCYAQAAigIAIJkBAACLAgAgngEAAAEAIAMVAACJAgAgmAEAAIoCACCeAQAAAQAgAAAACxUAAPYBADAWAAD7AQAwmAEAAPcBADCZAQAA-AEAMJoBAAD5AQAgmwEAAPoBADCcAQAA-gEAMJ0BAAD6AQAwngEAAPoBADCfAQAA_AEAMKABAAD9AQAwCxUAAO0BADAWAADxAQAwmAEAAO4BADCZAQAA7wEAMJoBAADwAQAgmwEAANcBADCcAQAA1wEAMJ0BAADXAQAwngEAANcBADCfAQAA8gEAMKABAADaAQAwCAcAAMQBACBkAQAAAAFlAQAAAAFnAQAAAAFoAgAAAAFpCAAAAAFqIAAAAAFrQAAAAAECAAAACQAgFQAA9QEAIAMAAAAJACAVAAD1AQAgFgAA9AEAIAEOAACIAgAwAgAAAAkAIA4AAPQBACACAAAA2wEAIA4AAPMBACAHZAEAvQEAIWUBAL0BACFnAQC9AQAhaAIAvgEAIWkIAL8BACFqIADAAQAha0AAwQEAIQgHAADCAQAgZAEAvQEAIWUBAL0BACFnAQC9AQAhaAIAvgEAIWkIAL8BACFqIADAAQAha0AAwQEAIQgHAADEAQAgZAEAAAABZQEAAAABZwEAAAABaAIAAAABaQgAAAABaiAAAAABa0AAAAABCWQBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAX8BAAAAAYABAQAAAAGQAQEAAAABAgAAAAUAIBUAAIECACADAAAABQAgFQAAgQIAIBYAAIACACABDgAAhwIAMA4DAAC2AQAgYQAAtwEAMGIAAAMAEGMAALcBADBkAQAAAAFmAQCjAQAhZwEAowEAIWgCAKUBACFpCAC0AQAhaiAApgEAIWtAAKoBACF_AQCjAQAhgAEBAKMBACGQAQEAowEAIQIAAAAFACAOAACAAgAgAgAAAP4BACAOAAD_AQAgDWEAAP0BADBiAAD-AQAQYwAA_QEAMGQBAKMBACFmAQCjAQAhZwEAowEAIWgCAKUBACFpCAC0AQAhaiAApgEAIWtAAKoBACF_AQCjAQAhgAEBAKMBACGQAQEAowEAIQ1hAAD9AQAwYgAA_gEAEGMAAP0BADBkAQCjAQAhZgEAowEAIWcBAKMBACFoAgClAQAhaQgAtAEAIWogAKYBACFrQACqAQAhfwEAowEAIYABAQCjAQAhkAEBAKMBACEJZAEAvQEAIWcBAL0BACFoAgC-AQAhaQgAvwEAIWogAMABACFrQADBAQAhfwEAvQEAIYABAQC9AQAhkAEBAL0BACEJZAEAvQEAIWcBAL0BACFoAgC-AQAhaQgAvwEAIWogAMABACFrQADBAQAhfwEAvQEAIYABAQC9AQAhkAEBAL0BACEJZAEAAAABZwEAAAABaAIAAAABaQgAAAABaiAAAAABa0AAAAABfwEAAAABgAEBAAAAAZABAQAAAAEEFQAA9gEAMJgBAAD3AQAwmgEAAPkBACCeAQAA-gEAMAQVAADtAQAwmAEAAO4BADCaAQAA8AEAIJ4BAADXAQAwAAEFAADgAQAgAgQAAIQCACAIAADgAQAgCWQBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAX8BAAAAAYABAQAAAAGQAQEAAAABB2QBAAAAAWUBAAAAAWcBAAAAAWgCAAAAAWkIAAAAAWogAAAAAWtAAAAAAQcIAACDAgAgZAEAAAABhAFAAAAAAZEBAQAAAAGSAQEAAAABkwEBAAAAAZQBIAAAAAECAAAAAQAgFQAAiQIAIAMAAAAQACAVAACJAgAgFgAAjQIAIAkAAAAQACAIAADsAQAgDgAAjQIAIGQBAL0BACGEAUAAwQEAIZEBAQC9AQAhkgEBAL0BACGTAQEAvQEAIZQBIADAAQAhBwgAAOwBACBkAQC9AQAhhAFAAMEBACGRAQEAvQEAIZIBAQC9AQAhkwEBAL0BACGUASAAwAEAIQdkAQAAAAFmAQAAAAFnAQAAAAFoAgAAAAFpCAAAAAFqIAAAAAFrQAAAAAEHBAAAggIAIGQBAAAAAYQBQAAAAAGRAQEAAAABkgEBAAAAAZMBAQAAAAGUASAAAAABAgAAAAEAIBUAAI8CACAEZAEAAAABfwEAAAABgAEBAAAAAYwBAQAAAAECAAAAPAAgFQAAkQIAIAMAAAAQACAVAACPAgAgFgAAlQIAIAkAAAAQACAEAADrAQAgDgAAlQIAIGQBAL0BACGEAUAAwQEAIZEBAQC9AQAhkgEBAL0BACGTAQEAvQEAIZQBIADAAQAhBwQAAOsBACBkAQC9AQAhhAFAAMEBACGRAQEAvQEAIZIBAQC9AQAhkwEBAL0BACGUASAAwAEAIQMAAAA_ACAVAACRAgAgFgAAmAIAIAYAAAA_ACAOAACYAgAgZAEAvQEAIX8BAL0BACGAAQEAvQEAIYwBAQC9AQAhBGQBAL0BACF_AQC9AQAhgAEBAL0BACGMAQEAvQEAIQMEBgIGAAYICgMBAwABAgMAAQcABAIFCwMGAAUBBQwAAgQNAAgOAAAAAAMGAAsbAAwcAA0AAAADBgALGwAMHAANAQMAAQEDAAEFBgASGwAVHAAWLQATLgAUAAAAAAAFBgASGwAVHAAWLQATLgAUAAADBgAbGwAcHAAdAAAAAwYAGxsAHBwAHQAAAAUGACMbACYcACctACQuACUAAAAAAAUGACMbACYcACctACQuACUCAwABBwAEAgMAAQcABAUGACwbAC8cADAtAC0uAC4AAAAAAAUGACwbAC8cADAtAC0uAC4JAgEKDwELEgEMEwENFAEPFgEQGAcRGQgSGwETHQcUHgkXHwEYIAEZIQcdJAoeJQ4fJgIgJwIhKAIiKQIjKgIkLAIlLgcmLw8nMQIoMwcpNBAqNQIrNgIsNwcvOhEwOxcxPQQyPgQzQQQ0QgQ1QwQ2RQQ3Rwc4SBg5SgQ6TAc7TRk8TgQ9TwQ-UAc_UxpAVB5BVh9CVx9DWh9EWx9FXB9GXh9HYAdIYSBJYx9KZQdLZiFMZx9NaB9OaQdPbCJQbShRbgNSbwNTcANUcQNVcgNWdANXdgdYdylZeQNaewdbfCpcfQNdfgNefwdfggErYIMBMQ" } async function decodeBase64AsWasm(wasmBase64: string): Promise { diff --git a/lib/generated/prisma/internal/prismaNamespace.ts b/lib/generated/prisma/internal/prismaNamespace.ts index 2db87a3..bdf150d 100644 --- a/lib/generated/prisma/internal/prismaNamespace.ts +++ b/lib/generated/prisma/internal/prismaNamespace.ts @@ -863,6 +863,7 @@ export const RoomScalarFieldEnum = { totalRounds: 'totalRounds', maxPlayers: 'maxPlayers', gameMode: 'gameMode', + searchAllowed: 'searchAllowed', startArticle: 'startArticle', targetArticle: 'targetArticle', roundWinner: 'roundWinner', diff --git a/lib/generated/prisma/internal/prismaNamespaceBrowser.ts b/lib/generated/prisma/internal/prismaNamespaceBrowser.ts index 615a8f2..1135ac1 100644 --- a/lib/generated/prisma/internal/prismaNamespaceBrowser.ts +++ b/lib/generated/prisma/internal/prismaNamespaceBrowser.ts @@ -120,6 +120,7 @@ export const RoomScalarFieldEnum = { totalRounds: 'totalRounds', maxPlayers: 'maxPlayers', gameMode: 'gameMode', + searchAllowed: 'searchAllowed', startArticle: 'startArticle', targetArticle: 'targetArticle', roundWinner: 'roundWinner', diff --git a/lib/generated/prisma/models/Room.ts b/lib/generated/prisma/models/Room.ts index b71465b..d7d4b7b 100644 --- a/lib/generated/prisma/models/Room.ts +++ b/lib/generated/prisma/models/Room.ts @@ -51,6 +51,7 @@ export type RoomMinAggregateOutputType = { totalRounds: number | null maxPlayers: number | null gameMode: string | null + searchAllowed: boolean | null startArticle: string | null targetArticle: string | null roundWinner: string | null @@ -67,6 +68,7 @@ export type RoomMaxAggregateOutputType = { totalRounds: number | null maxPlayers: number | null gameMode: string | null + searchAllowed: boolean | null startArticle: string | null targetArticle: string | null roundWinner: string | null @@ -84,6 +86,7 @@ export type RoomCountAggregateOutputType = { totalRounds: number maxPlayers: number gameMode: number + searchAllowed: number startArticle: number targetArticle: number roundWinner: number @@ -120,6 +123,7 @@ export type RoomMinAggregateInputType = { totalRounds?: true maxPlayers?: true gameMode?: true + searchAllowed?: true startArticle?: true targetArticle?: true roundWinner?: true @@ -136,6 +140,7 @@ export type RoomMaxAggregateInputType = { totalRounds?: true maxPlayers?: true gameMode?: true + searchAllowed?: true startArticle?: true targetArticle?: true roundWinner?: true @@ -153,6 +158,7 @@ export type RoomCountAggregateInputType = { totalRounds?: true maxPlayers?: true gameMode?: true + searchAllowed?: true startArticle?: true targetArticle?: true roundWinner?: true @@ -257,6 +263,7 @@ export type RoomGroupByOutputType = { totalRounds: number maxPlayers: number gameMode: string + searchAllowed: boolean startArticle: string targetArticle: string roundWinner: string | null @@ -297,6 +304,7 @@ export type RoomWhereInput = { totalRounds?: Prisma.IntFilter<"Room"> | number maxPlayers?: Prisma.IntFilter<"Room"> | number gameMode?: Prisma.StringFilter<"Room"> | string + searchAllowed?: Prisma.BoolFilter<"Room"> | boolean startArticle?: Prisma.StringFilter<"Room"> | string targetArticle?: Prisma.StringFilter<"Room"> | string roundWinner?: Prisma.StringNullableFilter<"Room"> | string | null @@ -314,6 +322,7 @@ export type RoomOrderByWithRelationInput = { totalRounds?: Prisma.SortOrder maxPlayers?: Prisma.SortOrder gameMode?: Prisma.SortOrder + searchAllowed?: Prisma.SortOrder startArticle?: Prisma.SortOrder targetArticle?: Prisma.SortOrder roundWinner?: Prisma.SortOrderInput | Prisma.SortOrder @@ -334,6 +343,7 @@ export type RoomWhereUniqueInput = Prisma.AtLeast<{ totalRounds?: Prisma.IntFilter<"Room"> | number maxPlayers?: Prisma.IntFilter<"Room"> | number gameMode?: Prisma.StringFilter<"Room"> | string + searchAllowed?: Prisma.BoolFilter<"Room"> | boolean startArticle?: Prisma.StringFilter<"Room"> | string targetArticle?: Prisma.StringFilter<"Room"> | string roundWinner?: Prisma.StringNullableFilter<"Room"> | string | null @@ -351,6 +361,7 @@ export type RoomOrderByWithAggregationInput = { totalRounds?: Prisma.SortOrder maxPlayers?: Prisma.SortOrder gameMode?: Prisma.SortOrder + searchAllowed?: Prisma.SortOrder startArticle?: Prisma.SortOrder targetArticle?: Prisma.SortOrder roundWinner?: Prisma.SortOrderInput | Prisma.SortOrder @@ -376,6 +387,7 @@ export type RoomScalarWhereWithAggregatesInput = { totalRounds?: Prisma.IntWithAggregatesFilter<"Room"> | number maxPlayers?: Prisma.IntWithAggregatesFilter<"Room"> | number gameMode?: Prisma.StringWithAggregatesFilter<"Room"> | string + searchAllowed?: Prisma.BoolWithAggregatesFilter<"Room"> | boolean startArticle?: Prisma.StringWithAggregatesFilter<"Room"> | string targetArticle?: Prisma.StringWithAggregatesFilter<"Room"> | string roundWinner?: Prisma.StringNullableWithAggregatesFilter<"Room"> | string | null @@ -393,6 +405,7 @@ export type RoomCreateInput = { totalRounds?: number maxPlayers?: number gameMode?: string + searchAllowed?: boolean startArticle?: string targetArticle?: string roundWinner?: string | null @@ -410,6 +423,7 @@ export type RoomUncheckedCreateInput = { totalRounds?: number maxPlayers?: number gameMode?: string + searchAllowed?: boolean startArticle?: string targetArticle?: string roundWinner?: string | null @@ -427,6 +441,7 @@ export type RoomUpdateInput = { totalRounds?: Prisma.IntFieldUpdateOperationsInput | number maxPlayers?: Prisma.IntFieldUpdateOperationsInput | number gameMode?: Prisma.StringFieldUpdateOperationsInput | string + searchAllowed?: Prisma.BoolFieldUpdateOperationsInput | boolean startArticle?: Prisma.StringFieldUpdateOperationsInput | string targetArticle?: Prisma.StringFieldUpdateOperationsInput | string roundWinner?: Prisma.NullableStringFieldUpdateOperationsInput | string | null @@ -444,6 +459,7 @@ export type RoomUncheckedUpdateInput = { totalRounds?: Prisma.IntFieldUpdateOperationsInput | number maxPlayers?: Prisma.IntFieldUpdateOperationsInput | number gameMode?: Prisma.StringFieldUpdateOperationsInput | string + searchAllowed?: Prisma.BoolFieldUpdateOperationsInput | boolean startArticle?: Prisma.StringFieldUpdateOperationsInput | string targetArticle?: Prisma.StringFieldUpdateOperationsInput | string roundWinner?: Prisma.NullableStringFieldUpdateOperationsInput | string | null @@ -461,6 +477,7 @@ export type RoomCreateManyInput = { totalRounds?: number maxPlayers?: number gameMode?: string + searchAllowed?: boolean startArticle?: string targetArticle?: string roundWinner?: string | null @@ -478,6 +495,7 @@ export type RoomUpdateManyMutationInput = { totalRounds?: Prisma.IntFieldUpdateOperationsInput | number maxPlayers?: Prisma.IntFieldUpdateOperationsInput | number gameMode?: Prisma.StringFieldUpdateOperationsInput | string + searchAllowed?: Prisma.BoolFieldUpdateOperationsInput | boolean startArticle?: Prisma.StringFieldUpdateOperationsInput | string targetArticle?: Prisma.StringFieldUpdateOperationsInput | string roundWinner?: Prisma.NullableStringFieldUpdateOperationsInput | string | null @@ -495,6 +513,7 @@ export type RoomUncheckedUpdateManyInput = { totalRounds?: Prisma.IntFieldUpdateOperationsInput | number maxPlayers?: Prisma.IntFieldUpdateOperationsInput | number gameMode?: Prisma.StringFieldUpdateOperationsInput | string + searchAllowed?: Prisma.BoolFieldUpdateOperationsInput | boolean startArticle?: Prisma.StringFieldUpdateOperationsInput | string targetArticle?: Prisma.StringFieldUpdateOperationsInput | string roundWinner?: Prisma.NullableStringFieldUpdateOperationsInput | string | null @@ -512,6 +531,7 @@ export type RoomCountOrderByAggregateInput = { totalRounds?: Prisma.SortOrder maxPlayers?: Prisma.SortOrder gameMode?: Prisma.SortOrder + searchAllowed?: Prisma.SortOrder startArticle?: Prisma.SortOrder targetArticle?: Prisma.SortOrder roundWinner?: Prisma.SortOrder @@ -537,6 +557,7 @@ export type RoomMaxOrderByAggregateInput = { totalRounds?: Prisma.SortOrder maxPlayers?: Prisma.SortOrder gameMode?: Prisma.SortOrder + searchAllowed?: Prisma.SortOrder startArticle?: Prisma.SortOrder targetArticle?: Prisma.SortOrder roundWinner?: Prisma.SortOrder @@ -553,6 +574,7 @@ export type RoomMinOrderByAggregateInput = { totalRounds?: Prisma.SortOrder maxPlayers?: Prisma.SortOrder gameMode?: Prisma.SortOrder + searchAllowed?: Prisma.SortOrder startArticle?: Prisma.SortOrder targetArticle?: Prisma.SortOrder roundWinner?: Prisma.SortOrder @@ -601,6 +623,7 @@ export type RoomSelect = runtime.Types.Extensions.GetOmit<"code" | "players" | "phase" | "round" | "totalRounds" | "maxPlayers" | "gameMode" | "startArticle" | "targetArticle" | "roundWinner" | "countdownStart" | "roundStart" | "createdAt" | "updatedAt", ExtArgs["result"]["room"]> +export type RoomOmit = runtime.Types.Extensions.GetOmit<"code" | "players" | "phase" | "round" | "totalRounds" | "maxPlayers" | "gameMode" | "searchAllowed" | "startArticle" | "targetArticle" | "roundWinner" | "countdownStart" | "roundStart" | "createdAt" | "updatedAt", ExtArgs["result"]["room"]> export type $RoomPayload = { name: "Room" @@ -674,6 +700,7 @@ export type $RoomPayload readonly maxPlayers: Prisma.FieldRef<"Room", 'Int'> readonly gameMode: Prisma.FieldRef<"Room", 'String'> + readonly searchAllowed: Prisma.FieldRef<"Room", 'Boolean'> readonly startArticle: Prisma.FieldRef<"Room", 'String'> readonly targetArticle: Prisma.FieldRef<"Room", 'String'> readonly roundWinner: Prisma.FieldRef<"Room", 'String'> diff --git a/lib/useMultiGame.ts b/lib/useMultiGame.ts index b28bc54..d54ee57 100644 --- a/lib/useMultiGame.ts +++ b/lib/useMultiGame.ts @@ -195,6 +195,16 @@ export function useMultiGame() { return {}; } + async function setSearchAllowed(value: boolean) { + if (!room || !playerId) return; + const res = await fetch(`/api/rooms/${room.code}`, { + method: "PATCH", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ action: "setSearchAllowed", playerId, value }), + }); + if (res.ok) setRoom((await res.json() as { room: Room }).room); + } + async function surrender() { if (!room || !playerId) return; const res = await fetch(`/api/rooms/${room.code}`, { @@ -257,7 +267,7 @@ export function useMultiGame() { return { room, playerId, html, title, loading, loadError, history, clicks: clicksDisplay, elapsed: timer.elapsed, countdown, - createRoom, joinRoom, startGame, nextRound, resetGame, leave, navigate, surrender, restore, + createRoom, joinRoom, startGame, nextRound, resetGame, leave, navigate, surrender, setSearchAllowed, restore, retryLoad: () => title && loadArticle(title), }; } diff --git a/lib/useSearchAllowed.ts b/lib/useSearchAllowed.ts index 11bccfe..e3abe24 100644 --- a/lib/useSearchAllowed.ts +++ b/lib/useSearchAllowed.ts @@ -4,12 +4,15 @@ import { useEffect, useState } from "react"; const KEY = "wikirush_search_allowed"; +// Pour les modes solo/blitz : état local via localStorage + blocage Ctrl+F export function useSearchAllowed() { const [allowed, setAllowed] = useState(() => { if (typeof window === "undefined") return false; return localStorage.getItem(KEY) === "true"; }); + useCtrlFBlock(allowed); + function toggle() { setAllowed((prev) => { const next = !prev; @@ -18,6 +21,11 @@ export function useSearchAllowed() { }); } + return { allowed, toggle }; +} + +// Pour le mode multi : blocage Ctrl+F basé sur room.searchAllowed (vérité côté serveur) +export function useCtrlFBlock(allowed: boolean) { useEffect(() => { function handleKeyDown(e: KeyboardEvent) { if ((e.ctrlKey || e.metaKey) && e.key === "f") { @@ -30,6 +38,4 @@ export function useSearchAllowed() { window.addEventListener("keydown", handleKeyDown, { capture: true }); return () => window.removeEventListener("keydown", handleKeyDown, { capture: true }); }, [allowed]); - - return { allowed, toggle }; } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 04f1f9a..1302bb5 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -50,6 +50,7 @@ model Room { totalRounds Int @default(3) maxPlayers Int @default(16) gameMode String @default("race") + searchAllowed Boolean @default(false) startArticle String @default("") targetArticle String @default("") roundWinner String?