diff --git a/app/api/auth/mobile/logout/route.ts b/app/api/auth/mobile/logout/route.ts new file mode 100644 index 0000000..0d07e93 --- /dev/null +++ b/app/api/auth/mobile/logout/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; +import { db } from "@/lib/db"; +import { hashToken, revokeRefreshTokenFamily } from "@/lib/mobileTokens"; + +export async function POST(req: NextRequest) { + const authHeader = req.headers.get("authorization"); + const accessToken = authHeader?.match(/^Bearer\s+(.+)$/i)?.[1]; + const { refreshToken } = await req.json().catch(() => ({})); + + if (accessToken) { + await db.session.deleteMany({ + where: { sessionToken: accessToken }, + }); + } + + if (typeof refreshToken === "string" && refreshToken.trim()) { + const token = await db.refreshToken.findUnique({ + where: { tokenHash: hashToken(refreshToken.trim()) }, + select: { userId: true, familyId: true }, + }); + + if (token) { + await revokeRefreshTokenFamily(token.userId, token.familyId); + } + } + + return NextResponse.json({ ok: true }); +} diff --git a/app/api/auth/mobile/refresh/route.ts b/app/api/auth/mobile/refresh/route.ts new file mode 100644 index 0000000..ad5325f --- /dev/null +++ b/app/api/auth/mobile/refresh/route.ts @@ -0,0 +1,71 @@ +import { NextRequest, NextResponse } from "next/server"; +import { db } from "@/lib/db"; +import { + ACCESS_TOKEN_EXPIRES_IN, + REFRESH_TOKEN_EXPIRES_IN, + createMobileTokenPair, + hashToken, + revokeRefreshTokenFamily, +} from "@/lib/mobileTokens"; + +export async function POST(req: NextRequest) { + const { refreshToken } = await req.json().catch(() => ({})); + + if (typeof refreshToken !== "string" || !refreshToken.trim()) { + return NextResponse.json({ error: "refreshToken is required" }, { status: 400 }); + } + + const existingRefreshToken = await db.refreshToken.findUnique({ + where: { tokenHash: hashToken(refreshToken.trim()) }, + include: { + user: { + select: { + id: true, + name: true, + phone: true, + role: true, + }, + }, + }, + }); + + if (!existingRefreshToken) { + return NextResponse.json({ error: "Invalid refresh token" }, { status: 401 }); + } + + if (existingRefreshToken.revokedAt) { + await revokeRefreshTokenFamily(existingRefreshToken.userId, existingRefreshToken.familyId); + return NextResponse.json({ error: "Refresh token has been revoked" }, { status: 401 }); + } + + if (existingRefreshToken.expiresAt <= new Date()) { + await db.refreshToken.update({ + where: { id: existingRefreshToken.id }, + data: { revokedAt: new Date() }, + }); + + return NextResponse.json({ error: "Refresh token has expired" }, { status: 401 }); + } + + const tokens = await createMobileTokenPair(existingRefreshToken.userId, existingRefreshToken.familyId); + + await db.refreshToken.update({ + where: { id: existingRefreshToken.id }, + data: { + revokedAt: new Date(), + replacedByTokenId: tokens.refreshTokenId, + }, + }); + + return NextResponse.json({ + accessToken: tokens.accessToken, + token: tokens.accessToken, + tokenType: "Bearer", + expiresIn: ACCESS_TOKEN_EXPIRES_IN, + expiresAt: tokens.accessTokenExpiresAt.toISOString(), + refreshToken: tokens.refreshToken, + refreshExpiresIn: REFRESH_TOKEN_EXPIRES_IN, + refreshExpiresAt: tokens.refreshTokenExpiresAt.toISOString(), + user: existingRefreshToken.user, + }); +} diff --git a/app/api/auth/mobile/verify/route.ts b/app/api/auth/mobile/verify/route.ts index 8647308..4fdd640 100644 --- a/app/api/auth/mobile/verify/route.ts +++ b/app/api/auth/mobile/verify/route.ts @@ -2,9 +2,13 @@ import { NextRequest, NextResponse } from "next/server"; import bcrypt from "bcryptjs"; import crypto from "crypto"; import { db } from "@/lib/db"; +import { + ACCESS_TOKEN_EXPIRES_IN, + REFRESH_TOKEN_EXPIRES_IN, + createMobileTokenPair, +} from "@/lib/mobileTokens"; const IRAN_MOBILE_REGEX = /^(\+98|98|0)?9\d{9}$/; -const SESSION_MAX_AGE_DAYS = 30; function normalizeIranMobile(phone: string) { const digits = phone.replace(/[^\d+]/g, ""); @@ -70,21 +74,17 @@ export async function POST(req: NextRequest) { data: { consumedAt: new Date() }, }); - const token = crypto.randomBytes(32).toString("hex"); - const expires = new Date(Date.now() + SESSION_MAX_AGE_DAYS * 24 * 60 * 60 * 1000); - - await db.session.create({ - data: { - sessionToken: token, - userId: user.id, - expires, - }, - }); + const tokens = await createMobileTokenPair(user.id); return NextResponse.json({ - token, + accessToken: tokens.accessToken, + token: tokens.accessToken, tokenType: "Bearer", - expiresAt: expires.toISOString(), + expiresIn: ACCESS_TOKEN_EXPIRES_IN, + expiresAt: tokens.accessTokenExpiresAt.toISOString(), + refreshToken: tokens.refreshToken, + refreshExpiresIn: REFRESH_TOKEN_EXPIRES_IN, + refreshExpiresAt: tokens.refreshTokenExpiresAt.toISOString(), user: { id: user.id, name: user.name, diff --git a/lib/generated/prisma/edge.js b/lib/generated/prisma/edge.js index 231a66e..aa0c06d 100644 --- a/lib/generated/prisma/edge.js +++ b/lib/generated/prisma/edge.js @@ -301,6 +301,17 @@ exports.Prisma.SessionScalarFieldEnum = { expires: 'expires' }; +exports.Prisma.RefreshTokenScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + userId: 'userId', + familyId: 'familyId', + expiresAt: 'expiresAt', + revokedAt: 'revokedAt', + replacedByTokenId: 'replacedByTokenId', + createdAt: 'createdAt' +}; + exports.Prisma.TeamScalarFieldEnum = { id: 'id', name: 'name', @@ -451,6 +462,7 @@ exports.Prisma.ModelName = { QuizSubmission: 'QuizSubmission', GoldenCard: 'GoldenCard', Session: 'Session', + RefreshToken: 'RefreshToken', Team: 'Team', TeamPlayer: 'TeamPlayer', Package: 'Package', @@ -504,13 +516,13 @@ const config = { } } }, - "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n engineType = \"client\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum Position {\n GK\n DEF\n MID\n FWD\n}\n\nenum MatchStage {\n GROUP\n ROUND_OF_16\n QUARTER_FINAL\n SEMI_FINAL\n THIRD_PLACE\n FINAL\n}\n\nenum MatchStatus {\n SCHEDULED\n LIVE\n FINISHED\n}\n\nenum TeamStatus {\n PENDING\n APPROVED\n REJECTED\n ACTIVE\n INACTIVE\n}\n\nenum PaymentStatus {\n PENDING\n SUCCESS\n FAILED\n}\n\nenum CardTier {\n BRONZE\n SILVER\n GOLD\n}\n\nenum EventType {\n GOAL\n ASSIST\n YELLOW_CARD\n RED_CARD\n SECOND_YELLOW\n SUBSTITUTION_IN\n SUBSTITUTION_OUT\n INJURY_NO_SUB\n CLEAN_SHEET\n PENALTY_SAVED\n PENALTY_MISSED\n OWN_GOAL\n EXTRA_TIME_BONUS\n MOTM\n}\n\nmodel Country {\n id String @id @default(cuid())\n name String @unique\n code String @unique\n flagUrl String?\n flagImage String? // نام فایل پرچم مثل Flag_of_Australia.webp\n confederation String? // کنفدراسیون (UEFA, AFC, CAF, ...)\n qualificationMethod String? // شیوه راه‌یابی\n qualificationDate String? // تاریخ راه‌یابی\n participationHistory String? // سابقه شرکت\n bestResult String? // بهترین نتیجه\n description String? @db.Text // توضیحات کامل\n defaultFormation String @default(\"4-3-3\")\n defaultLineupPlayerIds String[] @default([])\n defaultCaptainId String? // شناسه کاپیتان پیش‌فرض\n group Group? @relation(fields: [groupId], references: [id])\n groupId String?\n isEliminated Boolean @default(false)\n players Player[]\n homeMatches Match[] @relation(\"HomeTeam\")\n awayMatches Match[] @relation(\"AwayTeam\")\n}\n\nmodel Group {\n id String @id @default(cuid())\n name String @unique\n countries Country[]\n}\n\nmodel Player {\n id String @id @default(cuid())\n name String\n image String? // نام فایل تصویر در public/uploads/players/\n position Position\n countryId String\n country Country @relation(fields: [countryId], references: [id])\n price Float @default(5.0)\n totalPoints Int @default(0)\n isActive Boolean @default(true)\n isGoldenCardEligible Boolean @default(false)\n cardTier CardTier @default(BRONZE)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n matchStats PlayerMatchStat[]\n teamPlayers TeamPlayer[]\n events MatchEvent[]\n goldenCards GoldenCard[]\n}\n\nmodel Match {\n id String @id @default(cuid())\n homeTeamId String\n awayTeamId String\n homeTeam Country @relation(\"HomeTeam\", fields: [homeTeamId], references: [id])\n awayTeam Country @relation(\"AwayTeam\", fields: [awayTeamId], references: [id])\n homeScore Int?\n awayScore Int?\n stage MatchStage @default(GROUP)\n status MatchStatus @default(SCHEDULED)\n matchDate DateTime\n matchDatePersian String? // تاریخ شمسی\n stadium String? // نام ورزشگاه\n city String? // شهر\n referee String? // داور اصلی\n assistant1 String? // کمک داور 1\n assistant2 String? // کمک داور 2\n fourthOfficial String? // داور چهارم\n attendance Int? // تعداد تماشاگر\n weather String? // وضعیت آب و هوا\n description String? @db.Text // توضیحات بازی\n roundId String?\n round Round? @relation(fields: [roundId], references: [id])\n playerStats PlayerMatchStat[]\n events MatchEvent[]\n lineups MatchLineup[]\n createdAt DateTime @default(now())\n}\n\nmodel Round {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n matches Match[]\n createdAt DateTime @default(now())\n}\n\nmodel Gameweek {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n createdAt DateTime @default(now())\n}\n\nmodel MatchEvent {\n id String @id @default(cuid())\n matchId String\n playerId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n type EventType\n minute Int?\n extraInfo String?\n createdAt DateTime @default(now())\n}\n\nmodel MatchLineup {\n id String @id @default(cuid())\n matchId String\n countryId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n formation String\n playerIds String[]\n}\n\nmodel PlayerMatchStat {\n id String @id @default(cuid())\n playerId String\n matchId String\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n goals Int @default(0)\n assists Int @default(0)\n yellowCards Int @default(0)\n redCards Int @default(0)\n minutesPlayed Int @default(0)\n cleanSheet Boolean @default(false)\n penaltySaved Int @default(0)\n penaltyMissed Int @default(0)\n ownGoals Int @default(0)\n isMotm Boolean @default(false)\n extraTimeBonus Int @default(0)\n points Int @default(0)\n\n @@unique([playerId, matchId])\n}\n\nmodel ScoringRule {\n id String @id @default(cuid())\n position Position\n eventType EventType\n points Int\n updatedAt DateTime @updatedAt\n updatedBy String?\n\n @@unique([position, eventType])\n}\n\nmodel User {\n id String @id @default(cuid())\n name String?\n email String @unique\n phone String? @unique\n password String\n role Role @default(USER)\n createdAt DateTime @default(now())\n team Team?\n sessions Session[]\n payments Payment[]\n quizSubmissions QuizSubmission[]\n goldenCards GoldenCard[]\n}\n\nmodel LoginOtp {\n id String @id @default(cuid())\n phone String\n codeHash String\n attempts Int @default(0)\n expiresAt DateTime\n consumedAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([phone, createdAt])\n}\n\nmodel FantasyNews {\n id String @id @default(cuid())\n icon String\n title String\n description String @db.Text\n newsTime DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([newsTime])\n}\n\nenum GoldenCardStatus {\n SEALED\n OPENED\n}\n\nenum SpecialCardState {\n IN_INVENTORY\n IN_TEAM\n SOLD\n}\n\nmodel DailyQuiz {\n id String @id @default(cuid())\n date DateTime @db.Date\n windowStart DateTime\n windowEnd DateTime\n goldWinnersCount Int @default(1)\n silverWinnersCount Int @default(0)\n bronzeWinnersCount Int @default(0)\n goldMinCorrect Int?\n silverMinCorrect Int?\n bronzeMinCorrect Int?\n isProcessed Boolean @default(false)\n createdAt DateTime @default(now())\n questions QuizQuestion[]\n submissions QuizSubmission[]\n awardedCards GoldenCard[]\n\n @@unique([date])\n}\n\nmodel QuizQuestion {\n id String @id @default(cuid())\n quizId String\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n questionText String\n options String[]\n correctAnswer Int // index of correct option (0-based)\n order Int @default(0)\n}\n\nmodel QuizSubmission {\n id String @id @default(cuid())\n userId String\n quizId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n answers Int[] // user's selected option indexes\n correctAnswers Int @default(0)\n score Int @default(0) // percentage 0-100\n submittedAt DateTime @default(now())\n\n @@unique([userId, quizId])\n}\n\nmodel GoldenCard {\n id String @id @default(cuid())\n userId String\n quizId String?\n playerId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz? @relation(fields: [quizId], references: [id], onDelete: SetNull)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n cardTier CardTier @default(GOLD)\n status GoldenCardStatus @default(SEALED)\n state SpecialCardState @default(IN_INVENTORY)\n acquiredDate DateTime @default(now())\n openedAt DateTime?\n teamPlayer TeamPlayer?\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionToken String @unique\n userId String\n expires DateTime\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n\nmodel Team {\n id String @id @default(cuid())\n name String\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n budget Float @default(100.0)\n totalPoints Int @default(0)\n formation String @default(\"4-3-3\")\n status TeamStatus @default(INACTIVE)\n createdAt DateTime @default(now())\n players TeamPlayer[]\n}\n\nmodel TeamPlayer {\n teamId String\n playerId String\n goldenCardId String? @unique\n isCaptain Boolean @default(false)\n isViceCaptain Boolean @default(false)\n isBench Boolean @default(false)\n positionIndex Int @default(0)\n team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n goldenCard GoldenCard? @relation(fields: [goldenCardId], references: [id], onDelete: SetNull)\n\n @@id([teamId, playerId])\n}\n\nmodel Package {\n id String @id @default(cuid())\n name String\n budgetBonus Float\n price Int\n description String?\n isActive Boolean @default(true)\n payments Payment[]\n}\n\nmodel Payment {\n id String @id @default(cuid())\n userId String\n packageId String\n user User @relation(fields: [userId], references: [id])\n package Package @relation(fields: [packageId], references: [id])\n amount Int\n authority String? @unique\n refId String?\n status PaymentStatus @default(PENDING)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", - "inlineSchemaHash": "97ad530f39fbd0a5b25054636137b2d4c6123d03a537c2ff3b9a51a4155369d0", + "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n engineType = \"client\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum Position {\n GK\n DEF\n MID\n FWD\n}\n\nenum MatchStage {\n GROUP\n ROUND_OF_16\n QUARTER_FINAL\n SEMI_FINAL\n THIRD_PLACE\n FINAL\n}\n\nenum MatchStatus {\n SCHEDULED\n LIVE\n FINISHED\n}\n\nenum TeamStatus {\n PENDING\n APPROVED\n REJECTED\n ACTIVE\n INACTIVE\n}\n\nenum PaymentStatus {\n PENDING\n SUCCESS\n FAILED\n}\n\nenum CardTier {\n BRONZE\n SILVER\n GOLD\n}\n\nenum EventType {\n GOAL\n ASSIST\n YELLOW_CARD\n RED_CARD\n SECOND_YELLOW\n SUBSTITUTION_IN\n SUBSTITUTION_OUT\n INJURY_NO_SUB\n CLEAN_SHEET\n PENALTY_SAVED\n PENALTY_MISSED\n OWN_GOAL\n EXTRA_TIME_BONUS\n MOTM\n}\n\nmodel Country {\n id String @id @default(cuid())\n name String @unique\n code String @unique\n flagUrl String?\n flagImage String? // نام فایل پرچم مثل Flag_of_Australia.webp\n confederation String? // کنفدراسیون (UEFA, AFC, CAF, ...)\n qualificationMethod String? // شیوه راه‌یابی\n qualificationDate String? // تاریخ راه‌یابی\n participationHistory String? // سابقه شرکت\n bestResult String? // بهترین نتیجه\n description String? @db.Text // توضیحات کامل\n defaultFormation String @default(\"4-3-3\")\n defaultLineupPlayerIds String[] @default([])\n defaultCaptainId String? // شناسه کاپیتان پیش‌فرض\n group Group? @relation(fields: [groupId], references: [id])\n groupId String?\n isEliminated Boolean @default(false)\n players Player[]\n homeMatches Match[] @relation(\"HomeTeam\")\n awayMatches Match[] @relation(\"AwayTeam\")\n}\n\nmodel Group {\n id String @id @default(cuid())\n name String @unique\n countries Country[]\n}\n\nmodel Player {\n id String @id @default(cuid())\n name String\n image String? // نام فایل تصویر در public/uploads/players/\n position Position\n countryId String\n country Country @relation(fields: [countryId], references: [id])\n price Float @default(5.0)\n totalPoints Int @default(0)\n isActive Boolean @default(true)\n isGoldenCardEligible Boolean @default(false)\n cardTier CardTier @default(BRONZE)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n matchStats PlayerMatchStat[]\n teamPlayers TeamPlayer[]\n events MatchEvent[]\n goldenCards GoldenCard[]\n}\n\nmodel Match {\n id String @id @default(cuid())\n homeTeamId String\n awayTeamId String\n homeTeam Country @relation(\"HomeTeam\", fields: [homeTeamId], references: [id])\n awayTeam Country @relation(\"AwayTeam\", fields: [awayTeamId], references: [id])\n homeScore Int?\n awayScore Int?\n stage MatchStage @default(GROUP)\n status MatchStatus @default(SCHEDULED)\n matchDate DateTime\n matchDatePersian String? // تاریخ شمسی\n stadium String? // نام ورزشگاه\n city String? // شهر\n referee String? // داور اصلی\n assistant1 String? // کمک داور 1\n assistant2 String? // کمک داور 2\n fourthOfficial String? // داور چهارم\n attendance Int? // تعداد تماشاگر\n weather String? // وضعیت آب و هوا\n description String? @db.Text // توضیحات بازی\n roundId String?\n round Round? @relation(fields: [roundId], references: [id])\n playerStats PlayerMatchStat[]\n events MatchEvent[]\n lineups MatchLineup[]\n createdAt DateTime @default(now())\n}\n\nmodel Round {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n matches Match[]\n createdAt DateTime @default(now())\n}\n\nmodel Gameweek {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n createdAt DateTime @default(now())\n}\n\nmodel MatchEvent {\n id String @id @default(cuid())\n matchId String\n playerId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n type EventType\n minute Int?\n extraInfo String?\n createdAt DateTime @default(now())\n}\n\nmodel MatchLineup {\n id String @id @default(cuid())\n matchId String\n countryId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n formation String\n playerIds String[]\n}\n\nmodel PlayerMatchStat {\n id String @id @default(cuid())\n playerId String\n matchId String\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n goals Int @default(0)\n assists Int @default(0)\n yellowCards Int @default(0)\n redCards Int @default(0)\n minutesPlayed Int @default(0)\n cleanSheet Boolean @default(false)\n penaltySaved Int @default(0)\n penaltyMissed Int @default(0)\n ownGoals Int @default(0)\n isMotm Boolean @default(false)\n extraTimeBonus Int @default(0)\n points Int @default(0)\n\n @@unique([playerId, matchId])\n}\n\nmodel ScoringRule {\n id String @id @default(cuid())\n position Position\n eventType EventType\n points Int\n updatedAt DateTime @updatedAt\n updatedBy String?\n\n @@unique([position, eventType])\n}\n\nmodel User {\n id String @id @default(cuid())\n name String?\n email String @unique\n phone String? @unique\n password String\n role Role @default(USER)\n createdAt DateTime @default(now())\n team Team?\n sessions Session[]\n payments Payment[]\n quizSubmissions QuizSubmission[]\n goldenCards GoldenCard[]\n refreshTokens RefreshToken[]\n}\n\nmodel LoginOtp {\n id String @id @default(cuid())\n phone String\n codeHash String\n attempts Int @default(0)\n expiresAt DateTime\n consumedAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([phone, createdAt])\n}\n\nmodel FantasyNews {\n id String @id @default(cuid())\n icon String\n title String\n description String @db.Text\n newsTime DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([newsTime])\n}\n\nenum GoldenCardStatus {\n SEALED\n OPENED\n}\n\nenum SpecialCardState {\n IN_INVENTORY\n IN_TEAM\n SOLD\n}\n\nmodel DailyQuiz {\n id String @id @default(cuid())\n date DateTime @db.Date\n windowStart DateTime\n windowEnd DateTime\n goldWinnersCount Int @default(1)\n silverWinnersCount Int @default(0)\n bronzeWinnersCount Int @default(0)\n goldMinCorrect Int?\n silverMinCorrect Int?\n bronzeMinCorrect Int?\n isProcessed Boolean @default(false)\n createdAt DateTime @default(now())\n questions QuizQuestion[]\n submissions QuizSubmission[]\n awardedCards GoldenCard[]\n\n @@unique([date])\n}\n\nmodel QuizQuestion {\n id String @id @default(cuid())\n quizId String\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n questionText String\n options String[]\n correctAnswer Int // index of correct option (0-based)\n order Int @default(0)\n}\n\nmodel QuizSubmission {\n id String @id @default(cuid())\n userId String\n quizId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n answers Int[] // user's selected option indexes\n correctAnswers Int @default(0)\n score Int @default(0) // percentage 0-100\n submittedAt DateTime @default(now())\n\n @@unique([userId, quizId])\n}\n\nmodel GoldenCard {\n id String @id @default(cuid())\n userId String\n quizId String?\n playerId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz? @relation(fields: [quizId], references: [id], onDelete: SetNull)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n cardTier CardTier @default(GOLD)\n status GoldenCardStatus @default(SEALED)\n state SpecialCardState @default(IN_INVENTORY)\n acquiredDate DateTime @default(now())\n openedAt DateTime?\n teamPlayer TeamPlayer?\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionToken String @unique\n userId String\n expires DateTime\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n\nmodel RefreshToken {\n id String @id @default(cuid())\n tokenHash String @unique\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n familyId String\n expiresAt DateTime\n revokedAt DateTime?\n replacedByTokenId String?\n createdAt DateTime @default(now())\n\n @@index([userId])\n @@index([familyId])\n @@index([expiresAt])\n}\n\nmodel Team {\n id String @id @default(cuid())\n name String\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n budget Float @default(100.0)\n totalPoints Int @default(0)\n formation String @default(\"4-3-3\")\n status TeamStatus @default(INACTIVE)\n createdAt DateTime @default(now())\n players TeamPlayer[]\n}\n\nmodel TeamPlayer {\n teamId String\n playerId String\n goldenCardId String? @unique\n isCaptain Boolean @default(false)\n isViceCaptain Boolean @default(false)\n isBench Boolean @default(false)\n positionIndex Int @default(0)\n team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n goldenCard GoldenCard? @relation(fields: [goldenCardId], references: [id], onDelete: SetNull)\n\n @@id([teamId, playerId])\n}\n\nmodel Package {\n id String @id @default(cuid())\n name String\n budgetBonus Float\n price Int\n description String?\n isActive Boolean @default(true)\n payments Payment[]\n}\n\nmodel Payment {\n id String @id @default(cuid())\n userId String\n packageId String\n user User @relation(fields: [userId], references: [id])\n package Package @relation(fields: [packageId], references: [id])\n amount Int\n authority String? @unique\n refId String?\n status PaymentStatus @default(PENDING)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", + "inlineSchemaHash": "98e4715edb3236c358ee74dae87fa24e5d460352b7c3893e002809316206b601", "copyEngine": true } config.dirname = '/' -config.runtimeDataModel = JSON.parse("{\"models\":{\"Country\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"code\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"flagUrl\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"flagImage\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confederation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"qualificationMethod\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"qualificationDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"participationHistory\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bestResult\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"Text\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultFormation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"4-3-3\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultLineupPlayerIds\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultCaptainId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"group\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Group\",\"nativeType\":null,\"relationName\":\"CountryToGroup\",\"relationFromFields\":[\"groupId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"groupId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isEliminated\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"players\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"CountryToPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"homeMatches\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"HomeTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awayMatches\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"AwayTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Group\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"countries\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Country\",\"nativeType\":null,\"relationName\":\"CountryToGroup\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Player\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"image\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"position\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Position\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"countryId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"country\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Country\",\"nativeType\":null,\"relationName\":\"CountryToPlayer\",\"relationFromFields\":[\"countryId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"price\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":5,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isGoldenCardEligible\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"cardTier\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"CardTier\",\"nativeType\":null,\"default\":\"BRONZE\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"matchStats\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PlayerMatchStat\",\"nativeType\":null,\"relationName\":\"PlayerToPlayerMatchStat\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamPlayers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamPlayer\",\"nativeType\":null,\"relationName\":\"PlayerToTeamPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"events\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchEvent\",\"nativeType\":null,\"relationName\":\"MatchEventToPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldenCards\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"GoldenCard\",\"nativeType\":null,\"relationName\":\"GoldenCardToPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Match\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"homeTeamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awayTeamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"homeTeam\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Country\",\"nativeType\":null,\"relationName\":\"HomeTeam\",\"relationFromFields\":[\"homeTeamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awayTeam\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Country\",\"nativeType\":null,\"relationName\":\"AwayTeam\",\"relationFromFields\":[\"awayTeamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"homeScore\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awayScore\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"stage\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"MatchStage\",\"nativeType\":null,\"default\":\"GROUP\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"MatchStatus\",\"nativeType\":null,\"default\":\"SCHEDULED\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchDatePersian\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"stadium\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"city\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"referee\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assistant1\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assistant2\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fourthOfficial\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"attendance\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"weather\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"Text\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roundId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"round\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Round\",\"nativeType\":null,\"relationName\":\"MatchToRound\",\"relationFromFields\":[\"roundId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerStats\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PlayerMatchStat\",\"nativeType\":null,\"relationName\":\"MatchToPlayerMatchStat\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"events\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchEvent\",\"nativeType\":null,\"relationName\":\"MatchToMatchEvent\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"lineups\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchLineup\",\"nativeType\":null,\"relationName\":\"MatchToMatchLineup\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Round\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"number\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"deadline\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matches\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToRound\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Gameweek\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"number\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"deadline\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"MatchEvent\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToMatchEvent\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"player\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"MatchEventToPlayer\",\"relationFromFields\":[\"playerId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"EventType\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"minute\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"extraInfo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"MatchLineup\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"countryId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToMatchLineup\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"formation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerIds\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"PlayerMatchStat\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"player\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"PlayerToPlayerMatchStat\",\"relationFromFields\":[\"playerId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToPlayerMatchStat\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goals\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assists\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"yellowCards\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"redCards\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"minutesPlayed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"cleanSheet\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"penaltySaved\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"penaltyMissed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ownGoals\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMotm\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"extraTimeBonus\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"points\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"playerId\",\"matchId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"playerId\",\"matchId\"]}],\"isGenerated\":false},\"ScoringRule\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"position\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Position\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"eventType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"EventType\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"points\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"position\",\"eventType\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"position\",\"eventType\"]}],\"isGenerated\":false},\"User\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"email\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phone\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"password\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"role\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Role\",\"nativeType\":null,\"default\":\"USER\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"TeamToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"sessions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Session\",\"nativeType\":null,\"relationName\":\"SessionToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"payments\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Payment\",\"nativeType\":null,\"relationName\":\"PaymentToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quizSubmissions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"QuizSubmission\",\"nativeType\":null,\"relationName\":\"QuizSubmissionToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldenCards\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"GoldenCard\",\"nativeType\":null,\"relationName\":\"GoldenCardToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"LoginOtp\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phone\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"codeHash\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"attempts\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"consumedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"FantasyNews\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"icon\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"Text\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"newsTime\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"DailyQuiz\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"date\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":[\"Date\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"windowStart\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"windowEnd\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldWinnersCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":1,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"silverWinnersCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bronzeWinnersCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldMinCorrect\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"silverMinCorrect\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bronzeMinCorrect\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isProcessed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"questions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"QuizQuestion\",\"nativeType\":null,\"relationName\":\"DailyQuizToQuizQuestion\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"QuizSubmission\",\"nativeType\":null,\"relationName\":\"DailyQuizToQuizSubmission\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awardedCards\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"GoldenCard\",\"nativeType\":null,\"relationName\":\"DailyQuizToGoldenCard\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"date\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"date\"]}],\"isGenerated\":false},\"QuizQuestion\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quizId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quiz\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DailyQuiz\",\"nativeType\":null,\"relationName\":\"DailyQuizToQuizQuestion\",\"relationFromFields\":[\"quizId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"questionText\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"options\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"correctAnswer\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"order\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"QuizSubmission\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quizId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"QuizSubmissionToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quiz\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DailyQuiz\",\"nativeType\":null,\"relationName\":\"DailyQuizToQuizSubmission\",\"relationFromFields\":[\"quizId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"answers\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"correctAnswers\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"score\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submittedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"userId\",\"quizId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"userId\",\"quizId\"]}],\"isGenerated\":false},\"GoldenCard\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quizId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"GoldenCardToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quiz\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DailyQuiz\",\"nativeType\":null,\"relationName\":\"DailyQuizToGoldenCard\",\"relationFromFields\":[\"quizId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"SetNull\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"player\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"GoldenCardToPlayer\",\"relationFromFields\":[\"playerId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"cardTier\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"CardTier\",\"nativeType\":null,\"default\":\"GOLD\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"GoldenCardStatus\",\"nativeType\":null,\"default\":\"SEALED\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"state\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"SpecialCardState\",\"nativeType\":null,\"default\":\"IN_INVENTORY\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"acquiredDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"openedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamPlayer\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamPlayer\",\"nativeType\":null,\"relationName\":\"GoldenCardToTeamPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Session\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"expires\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"SessionToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Team\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"TeamToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"budget\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":100,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"formation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"4-3-3\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"TeamStatus\",\"nativeType\":null,\"default\":\"INACTIVE\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"players\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamPlayer\",\"nativeType\":null,\"relationName\":\"TeamToTeamPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TeamPlayer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldenCardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isCaptain\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isViceCaptain\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isBench\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"positionIndex\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"TeamToTeamPlayer\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"player\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"PlayerToTeamPlayer\",\"relationFromFields\":[\"playerId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldenCard\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"GoldenCard\",\"nativeType\":null,\"relationName\":\"GoldenCardToTeamPlayer\",\"relationFromFields\":[\"goldenCardId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"SetNull\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":{\"name\":null,\"fields\":[\"teamId\",\"playerId\"]},\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Package\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"budgetBonus\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"price\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"payments\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Payment\",\"nativeType\":null,\"relationName\":\"PackageToPayment\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Payment\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"packageId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"PaymentToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"package\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Package\",\"nativeType\":null,\"relationName\":\"PackageToPayment\",\"relationFromFields\":[\"packageId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"amount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"authority\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"refId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"PaymentStatus\",\"nativeType\":null,\"default\":\"PENDING\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{\"Role\":{\"values\":[{\"name\":\"USER\",\"dbName\":null},{\"name\":\"ADMIN\",\"dbName\":null}],\"dbName\":null},\"Position\":{\"values\":[{\"name\":\"GK\",\"dbName\":null},{\"name\":\"DEF\",\"dbName\":null},{\"name\":\"MID\",\"dbName\":null},{\"name\":\"FWD\",\"dbName\":null}],\"dbName\":null},\"MatchStage\":{\"values\":[{\"name\":\"GROUP\",\"dbName\":null},{\"name\":\"ROUND_OF_16\",\"dbName\":null},{\"name\":\"QUARTER_FINAL\",\"dbName\":null},{\"name\":\"SEMI_FINAL\",\"dbName\":null},{\"name\":\"THIRD_PLACE\",\"dbName\":null},{\"name\":\"FINAL\",\"dbName\":null}],\"dbName\":null},\"MatchStatus\":{\"values\":[{\"name\":\"SCHEDULED\",\"dbName\":null},{\"name\":\"LIVE\",\"dbName\":null},{\"name\":\"FINISHED\",\"dbName\":null}],\"dbName\":null},\"TeamStatus\":{\"values\":[{\"name\":\"PENDING\",\"dbName\":null},{\"name\":\"APPROVED\",\"dbName\":null},{\"name\":\"REJECTED\",\"dbName\":null},{\"name\":\"ACTIVE\",\"dbName\":null},{\"name\":\"INACTIVE\",\"dbName\":null}],\"dbName\":null},\"PaymentStatus\":{\"values\":[{\"name\":\"PENDING\",\"dbName\":null},{\"name\":\"SUCCESS\",\"dbName\":null},{\"name\":\"FAILED\",\"dbName\":null}],\"dbName\":null},\"CardTier\":{\"values\":[{\"name\":\"BRONZE\",\"dbName\":null},{\"name\":\"SILVER\",\"dbName\":null},{\"name\":\"GOLD\",\"dbName\":null}],\"dbName\":null},\"EventType\":{\"values\":[{\"name\":\"GOAL\",\"dbName\":null},{\"name\":\"ASSIST\",\"dbName\":null},{\"name\":\"YELLOW_CARD\",\"dbName\":null},{\"name\":\"RED_CARD\",\"dbName\":null},{\"name\":\"SECOND_YELLOW\",\"dbName\":null},{\"name\":\"SUBSTITUTION_IN\",\"dbName\":null},{\"name\":\"SUBSTITUTION_OUT\",\"dbName\":null},{\"name\":\"INJURY_NO_SUB\",\"dbName\":null},{\"name\":\"CLEAN_SHEET\",\"dbName\":null},{\"name\":\"PENALTY_SAVED\",\"dbName\":null},{\"name\":\"PENALTY_MISSED\",\"dbName\":null},{\"name\":\"OWN_GOAL\",\"dbName\":null},{\"name\":\"EXTRA_TIME_BONUS\",\"dbName\":null},{\"name\":\"MOTM\",\"dbName\":null}],\"dbName\":null},\"GoldenCardStatus\":{\"values\":[{\"name\":\"SEALED\",\"dbName\":null},{\"name\":\"OPENED\",\"dbName\":null}],\"dbName\":null},\"SpecialCardState\":{\"values\":[{\"name\":\"IN_INVENTORY\",\"dbName\":null},{\"name\":\"IN_TEAM\",\"dbName\":null},{\"name\":\"SOLD\",\"dbName\":null}],\"dbName\":null}},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Country\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"code\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"flagUrl\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"flagImage\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confederation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"qualificationMethod\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"qualificationDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"participationHistory\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bestResult\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"Text\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultFormation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"4-3-3\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultLineupPlayerIds\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultCaptainId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"group\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Group\",\"nativeType\":null,\"relationName\":\"CountryToGroup\",\"relationFromFields\":[\"groupId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"groupId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isEliminated\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"players\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"CountryToPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"homeMatches\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"HomeTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awayMatches\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"AwayTeam\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Group\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"countries\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Country\",\"nativeType\":null,\"relationName\":\"CountryToGroup\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Player\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"image\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"position\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Position\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"countryId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"country\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Country\",\"nativeType\":null,\"relationName\":\"CountryToPlayer\",\"relationFromFields\":[\"countryId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"price\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":5,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isGoldenCardEligible\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"cardTier\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"CardTier\",\"nativeType\":null,\"default\":\"BRONZE\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"matchStats\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PlayerMatchStat\",\"nativeType\":null,\"relationName\":\"PlayerToPlayerMatchStat\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamPlayers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamPlayer\",\"nativeType\":null,\"relationName\":\"PlayerToTeamPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"events\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchEvent\",\"nativeType\":null,\"relationName\":\"MatchEventToPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldenCards\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"GoldenCard\",\"nativeType\":null,\"relationName\":\"GoldenCardToPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Match\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"homeTeamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awayTeamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"homeTeam\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Country\",\"nativeType\":null,\"relationName\":\"HomeTeam\",\"relationFromFields\":[\"homeTeamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awayTeam\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Country\",\"nativeType\":null,\"relationName\":\"AwayTeam\",\"relationFromFields\":[\"awayTeamId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"homeScore\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awayScore\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"stage\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"MatchStage\",\"nativeType\":null,\"default\":\"GROUP\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"MatchStatus\",\"nativeType\":null,\"default\":\"SCHEDULED\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchDatePersian\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"stadium\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"city\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"referee\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assistant1\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assistant2\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fourthOfficial\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"attendance\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"weather\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"Text\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roundId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"round\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Round\",\"nativeType\":null,\"relationName\":\"MatchToRound\",\"relationFromFields\":[\"roundId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerStats\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PlayerMatchStat\",\"nativeType\":null,\"relationName\":\"MatchToPlayerMatchStat\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"events\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchEvent\",\"nativeType\":null,\"relationName\":\"MatchToMatchEvent\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"lineups\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MatchLineup\",\"nativeType\":null,\"relationName\":\"MatchToMatchLineup\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Round\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"number\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"deadline\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matches\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToRound\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Gameweek\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"number\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"deadline\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"MatchEvent\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToMatchEvent\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"player\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"MatchEventToPlayer\",\"relationFromFields\":[\"playerId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"EventType\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"minute\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"extraInfo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"MatchLineup\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"countryId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToMatchLineup\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"formation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerIds\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"PlayerMatchStat\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"matchId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"player\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"PlayerToPlayerMatchStat\",\"relationFromFields\":[\"playerId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"match\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Match\",\"nativeType\":null,\"relationName\":\"MatchToPlayerMatchStat\",\"relationFromFields\":[\"matchId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goals\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assists\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"yellowCards\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"redCards\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"minutesPlayed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"cleanSheet\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"penaltySaved\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"penaltyMissed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ownGoals\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMotm\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"extraTimeBonus\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"points\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"playerId\",\"matchId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"playerId\",\"matchId\"]}],\"isGenerated\":false},\"ScoringRule\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"position\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Position\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"eventType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"EventType\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"points\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"position\",\"eventType\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"position\",\"eventType\"]}],\"isGenerated\":false},\"User\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"email\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phone\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"password\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"role\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Role\",\"nativeType\":null,\"default\":\"USER\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"TeamToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"sessions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Session\",\"nativeType\":null,\"relationName\":\"SessionToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"payments\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Payment\",\"nativeType\":null,\"relationName\":\"PaymentToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quizSubmissions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"QuizSubmission\",\"nativeType\":null,\"relationName\":\"QuizSubmissionToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldenCards\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"GoldenCard\",\"nativeType\":null,\"relationName\":\"GoldenCardToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"refreshTokens\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"RefreshToken\",\"nativeType\":null,\"relationName\":\"RefreshTokenToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"LoginOtp\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phone\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"codeHash\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"attempts\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"consumedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"FantasyNews\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"icon\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"Text\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"newsTime\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"DailyQuiz\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"date\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":[\"Date\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"windowStart\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"windowEnd\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldWinnersCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":1,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"silverWinnersCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bronzeWinnersCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldMinCorrect\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"silverMinCorrect\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"bronzeMinCorrect\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isProcessed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"questions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"QuizQuestion\",\"nativeType\":null,\"relationName\":\"DailyQuizToQuizQuestion\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"QuizSubmission\",\"nativeType\":null,\"relationName\":\"DailyQuizToQuizSubmission\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"awardedCards\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"GoldenCard\",\"nativeType\":null,\"relationName\":\"DailyQuizToGoldenCard\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"date\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"date\"]}],\"isGenerated\":false},\"QuizQuestion\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quizId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quiz\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DailyQuiz\",\"nativeType\":null,\"relationName\":\"DailyQuizToQuizQuestion\",\"relationFromFields\":[\"quizId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"questionText\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"options\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"correctAnswer\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"order\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"QuizSubmission\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quizId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"QuizSubmissionToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quiz\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DailyQuiz\",\"nativeType\":null,\"relationName\":\"DailyQuizToQuizSubmission\",\"relationFromFields\":[\"quizId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"answers\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"correctAnswers\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"score\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submittedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"userId\",\"quizId\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"userId\",\"quizId\"]}],\"isGenerated\":false},\"GoldenCard\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quizId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"GoldenCardToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"quiz\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DailyQuiz\",\"nativeType\":null,\"relationName\":\"DailyQuizToGoldenCard\",\"relationFromFields\":[\"quizId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"SetNull\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"player\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"GoldenCardToPlayer\",\"relationFromFields\":[\"playerId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"cardTier\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"CardTier\",\"nativeType\":null,\"default\":\"GOLD\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"GoldenCardStatus\",\"nativeType\":null,\"default\":\"SEALED\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"state\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"SpecialCardState\",\"nativeType\":null,\"default\":\"IN_INVENTORY\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"acquiredDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"openedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"teamPlayer\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamPlayer\",\"nativeType\":null,\"relationName\":\"GoldenCardToTeamPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Session\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"expires\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"SessionToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"RefreshToken\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"RefreshTokenToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"familyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"revokedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"replacedByTokenId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Team\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"TeamToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"budget\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":100,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"formation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"4-3-3\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"TeamStatus\",\"nativeType\":null,\"default\":\"INACTIVE\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"players\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TeamPlayer\",\"nativeType\":null,\"relationName\":\"TeamToTeamPlayer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TeamPlayer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"teamId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"playerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldenCardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isCaptain\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isViceCaptain\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isBench\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"positionIndex\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"team\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Team\",\"nativeType\":null,\"relationName\":\"TeamToTeamPlayer\",\"relationFromFields\":[\"teamId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"player\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Player\",\"nativeType\":null,\"relationName\":\"PlayerToTeamPlayer\",\"relationFromFields\":[\"playerId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"goldenCard\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"GoldenCard\",\"nativeType\":null,\"relationName\":\"GoldenCardToTeamPlayer\",\"relationFromFields\":[\"goldenCardId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"SetNull\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":{\"name\":null,\"fields\":[\"teamId\",\"playerId\"]},\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Package\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"budgetBonus\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"price\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"payments\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Payment\",\"nativeType\":null,\"relationName\":\"PackageToPayment\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Payment\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"packageId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"PaymentToUser\",\"relationFromFields\":[\"userId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"package\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Package\",\"nativeType\":null,\"relationName\":\"PackageToPayment\",\"relationFromFields\":[\"packageId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"amount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"authority\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"refId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"PaymentStatus\",\"nativeType\":null,\"default\":\"PENDING\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{\"Role\":{\"values\":[{\"name\":\"USER\",\"dbName\":null},{\"name\":\"ADMIN\",\"dbName\":null}],\"dbName\":null},\"Position\":{\"values\":[{\"name\":\"GK\",\"dbName\":null},{\"name\":\"DEF\",\"dbName\":null},{\"name\":\"MID\",\"dbName\":null},{\"name\":\"FWD\",\"dbName\":null}],\"dbName\":null},\"MatchStage\":{\"values\":[{\"name\":\"GROUP\",\"dbName\":null},{\"name\":\"ROUND_OF_16\",\"dbName\":null},{\"name\":\"QUARTER_FINAL\",\"dbName\":null},{\"name\":\"SEMI_FINAL\",\"dbName\":null},{\"name\":\"THIRD_PLACE\",\"dbName\":null},{\"name\":\"FINAL\",\"dbName\":null}],\"dbName\":null},\"MatchStatus\":{\"values\":[{\"name\":\"SCHEDULED\",\"dbName\":null},{\"name\":\"LIVE\",\"dbName\":null},{\"name\":\"FINISHED\",\"dbName\":null}],\"dbName\":null},\"TeamStatus\":{\"values\":[{\"name\":\"PENDING\",\"dbName\":null},{\"name\":\"APPROVED\",\"dbName\":null},{\"name\":\"REJECTED\",\"dbName\":null},{\"name\":\"ACTIVE\",\"dbName\":null},{\"name\":\"INACTIVE\",\"dbName\":null}],\"dbName\":null},\"PaymentStatus\":{\"values\":[{\"name\":\"PENDING\",\"dbName\":null},{\"name\":\"SUCCESS\",\"dbName\":null},{\"name\":\"FAILED\",\"dbName\":null}],\"dbName\":null},\"CardTier\":{\"values\":[{\"name\":\"BRONZE\",\"dbName\":null},{\"name\":\"SILVER\",\"dbName\":null},{\"name\":\"GOLD\",\"dbName\":null}],\"dbName\":null},\"EventType\":{\"values\":[{\"name\":\"GOAL\",\"dbName\":null},{\"name\":\"ASSIST\",\"dbName\":null},{\"name\":\"YELLOW_CARD\",\"dbName\":null},{\"name\":\"RED_CARD\",\"dbName\":null},{\"name\":\"SECOND_YELLOW\",\"dbName\":null},{\"name\":\"SUBSTITUTION_IN\",\"dbName\":null},{\"name\":\"SUBSTITUTION_OUT\",\"dbName\":null},{\"name\":\"INJURY_NO_SUB\",\"dbName\":null},{\"name\":\"CLEAN_SHEET\",\"dbName\":null},{\"name\":\"PENALTY_SAVED\",\"dbName\":null},{\"name\":\"PENALTY_MISSED\",\"dbName\":null},{\"name\":\"OWN_GOAL\",\"dbName\":null},{\"name\":\"EXTRA_TIME_BONUS\",\"dbName\":null},{\"name\":\"MOTM\",\"dbName\":null}],\"dbName\":null},\"GoldenCardStatus\":{\"values\":[{\"name\":\"SEALED\",\"dbName\":null},{\"name\":\"OPENED\",\"dbName\":null}],\"dbName\":null},\"SpecialCardState\":{\"values\":[{\"name\":\"IN_INVENTORY\",\"dbName\":null},{\"name\":\"IN_TEAM\",\"dbName\":null},{\"name\":\"SOLD\",\"dbName\":null}],\"dbName\":null}},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.engineWasm = undefined config.compilerWasm = undefined diff --git a/lib/generated/prisma/index-browser.js b/lib/generated/prisma/index-browser.js index 1d2d9c6..5f84e93 100644 --- a/lib/generated/prisma/index-browser.js +++ b/lib/generated/prisma/index-browser.js @@ -329,6 +329,17 @@ exports.Prisma.SessionScalarFieldEnum = { expires: 'expires' }; +exports.Prisma.RefreshTokenScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + userId: 'userId', + familyId: 'familyId', + expiresAt: 'expiresAt', + revokedAt: 'revokedAt', + replacedByTokenId: 'replacedByTokenId', + createdAt: 'createdAt' +}; + exports.Prisma.TeamScalarFieldEnum = { id: 'id', name: 'name', @@ -479,6 +490,7 @@ exports.Prisma.ModelName = { QuizSubmission: 'QuizSubmission', GoldenCard: 'GoldenCard', Session: 'Session', + RefreshToken: 'RefreshToken', Team: 'Team', TeamPlayer: 'TeamPlayer', Package: 'Package', diff --git a/lib/generated/prisma/index.d.ts b/lib/generated/prisma/index.d.ts index 88b8450..d9feb60 100644 --- a/lib/generated/prisma/index.d.ts +++ b/lib/generated/prisma/index.d.ts @@ -103,6 +103,11 @@ export type GoldenCard = $Result.DefaultSelection * */ export type Session = $Result.DefaultSelection +/** + * Model RefreshToken + * + */ +export type RefreshToken = $Result.DefaultSelection /** * Model Team * @@ -572,6 +577,16 @@ export class PrismaClient< */ get session(): Prisma.SessionDelegate; + /** + * `prisma.refreshToken`: Exposes CRUD operations for the **RefreshToken** model. + * Example usage: + * ```ts + * // Fetch zero or more RefreshTokens + * const refreshTokens = await prisma.refreshToken.findMany() + * ``` + */ + get refreshToken(): Prisma.RefreshTokenDelegate; + /** * `prisma.team`: Exposes CRUD operations for the **Team** model. * Example usage: @@ -1070,6 +1085,7 @@ export namespace Prisma { QuizSubmission: 'QuizSubmission', GoldenCard: 'GoldenCard', Session: 'Session', + RefreshToken: 'RefreshToken', Team: 'Team', TeamPlayer: 'TeamPlayer', Package: 'Package', @@ -1092,7 +1108,7 @@ export namespace Prisma { omit: GlobalOmitOptions } meta: { - modelProps: "country" | "group" | "player" | "match" | "round" | "gameweek" | "matchEvent" | "matchLineup" | "playerMatchStat" | "scoringRule" | "user" | "loginOtp" | "fantasyNews" | "dailyQuiz" | "quizQuestion" | "quizSubmission" | "goldenCard" | "session" | "team" | "teamPlayer" | "package" | "payment" + modelProps: "country" | "group" | "player" | "match" | "round" | "gameweek" | "matchEvent" | "matchLineup" | "playerMatchStat" | "scoringRule" | "user" | "loginOtp" | "fantasyNews" | "dailyQuiz" | "quizQuestion" | "quizSubmission" | "goldenCard" | "session" | "refreshToken" | "team" | "teamPlayer" | "package" | "payment" txIsolationLevel: Prisma.TransactionIsolationLevel } model: { @@ -2428,6 +2444,80 @@ export namespace Prisma { } } } + RefreshToken: { + payload: Prisma.$RefreshTokenPayload + fields: Prisma.RefreshTokenFieldRefs + operations: { + findUnique: { + args: Prisma.RefreshTokenFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.RefreshTokenFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.RefreshTokenFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.RefreshTokenFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.RefreshTokenFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.RefreshTokenCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.RefreshTokenCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.RefreshTokenCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.RefreshTokenDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.RefreshTokenUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.RefreshTokenDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.RefreshTokenUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.RefreshTokenUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.RefreshTokenUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.RefreshTokenAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.RefreshTokenGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.RefreshTokenCountArgs + result: $Utils.Optional | number + } + } + } Team: { payload: Prisma.$TeamPayload fields: Prisma.TeamFieldRefs @@ -2838,6 +2928,7 @@ export namespace Prisma { quizSubmission?: QuizSubmissionOmit goldenCard?: GoldenCardOmit session?: SessionOmit + refreshToken?: RefreshTokenOmit team?: TeamOmit teamPlayer?: TeamPlayerOmit package?: PackageOmit @@ -3144,6 +3235,7 @@ export namespace Prisma { payments: number quizSubmissions: number goldenCards: number + refreshTokens: number } export type UserCountOutputTypeSelect = { @@ -3151,6 +3243,7 @@ export namespace Prisma { payments?: boolean | UserCountOutputTypeCountPaymentsArgs quizSubmissions?: boolean | UserCountOutputTypeCountQuizSubmissionsArgs goldenCards?: boolean | UserCountOutputTypeCountGoldenCardsArgs + refreshTokens?: boolean | UserCountOutputTypeCountRefreshTokensArgs } // Custom InputTypes @@ -3192,6 +3285,13 @@ export namespace Prisma { where?: GoldenCardWhereInput } + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountRefreshTokensArgs = { + where?: RefreshTokenWhereInput + } + /** * Count Type DailyQuizCountOutputType @@ -15190,6 +15290,7 @@ export namespace Prisma { payments?: boolean | User$paymentsArgs quizSubmissions?: boolean | User$quizSubmissionsArgs goldenCards?: boolean | User$goldenCardsArgs + refreshTokens?: boolean | User$refreshTokensArgs _count?: boolean | UserCountOutputTypeDefaultArgs }, ExtArgs["result"]["user"]> @@ -15230,6 +15331,7 @@ export namespace Prisma { payments?: boolean | User$paymentsArgs quizSubmissions?: boolean | User$quizSubmissionsArgs goldenCards?: boolean | User$goldenCardsArgs + refreshTokens?: boolean | User$refreshTokensArgs _count?: boolean | UserCountOutputTypeDefaultArgs } export type UserIncludeCreateManyAndReturn = {} @@ -15243,6 +15345,7 @@ export namespace Prisma { payments: Prisma.$PaymentPayload[] quizSubmissions: Prisma.$QuizSubmissionPayload[] goldenCards: Prisma.$GoldenCardPayload[] + refreshTokens: Prisma.$RefreshTokenPayload[] } scalars: $Extensions.GetPayloadResult<{ id: string @@ -15651,6 +15754,7 @@ export namespace Prisma { payments = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> quizSubmissions = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> goldenCards = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + refreshTokens = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> /** * Attaches callbacks for the resolution and/or rejection of the Promise. * @param onfulfilled The callback to execute when the Promise is resolved. @@ -16189,6 +16293,30 @@ export namespace Prisma { distinct?: GoldenCardScalarFieldEnum | GoldenCardScalarFieldEnum[] } + /** + * User.refreshTokens + */ + export type User$refreshTokensArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + where?: RefreshTokenWhereInput + orderBy?: RefreshTokenOrderByWithRelationInput | RefreshTokenOrderByWithRelationInput[] + cursor?: RefreshTokenWhereUniqueInput + take?: number + skip?: number + distinct?: RefreshTokenScalarFieldEnum | RefreshTokenScalarFieldEnum[] + } + /** * User without action */ @@ -24003,6 +24131,1103 @@ export namespace Prisma { } + /** + * Model RefreshToken + */ + + export type AggregateRefreshToken = { + _count: RefreshTokenCountAggregateOutputType | null + _min: RefreshTokenMinAggregateOutputType | null + _max: RefreshTokenMaxAggregateOutputType | null + } + + export type RefreshTokenMinAggregateOutputType = { + id: string | null + tokenHash: string | null + userId: string | null + familyId: string | null + expiresAt: Date | null + revokedAt: Date | null + replacedByTokenId: string | null + createdAt: Date | null + } + + export type RefreshTokenMaxAggregateOutputType = { + id: string | null + tokenHash: string | null + userId: string | null + familyId: string | null + expiresAt: Date | null + revokedAt: Date | null + replacedByTokenId: string | null + createdAt: Date | null + } + + export type RefreshTokenCountAggregateOutputType = { + id: number + tokenHash: number + userId: number + familyId: number + expiresAt: number + revokedAt: number + replacedByTokenId: number + createdAt: number + _all: number + } + + + export type RefreshTokenMinAggregateInputType = { + id?: true + tokenHash?: true + userId?: true + familyId?: true + expiresAt?: true + revokedAt?: true + replacedByTokenId?: true + createdAt?: true + } + + export type RefreshTokenMaxAggregateInputType = { + id?: true + tokenHash?: true + userId?: true + familyId?: true + expiresAt?: true + revokedAt?: true + replacedByTokenId?: true + createdAt?: true + } + + export type RefreshTokenCountAggregateInputType = { + id?: true + tokenHash?: true + userId?: true + familyId?: true + expiresAt?: true + revokedAt?: true + replacedByTokenId?: true + createdAt?: true + _all?: true + } + + export type RefreshTokenAggregateArgs = { + /** + * Filter which RefreshToken to aggregate. + */ + where?: RefreshTokenWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of RefreshTokens to fetch. + */ + orderBy?: RefreshTokenOrderByWithRelationInput | RefreshTokenOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: RefreshTokenWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` RefreshTokens from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` RefreshTokens. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned RefreshTokens + **/ + _count?: true | RefreshTokenCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: RefreshTokenMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: RefreshTokenMaxAggregateInputType + } + + export type GetRefreshTokenAggregateType = { + [P in keyof T & keyof AggregateRefreshToken]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type RefreshTokenGroupByArgs = { + where?: RefreshTokenWhereInput + orderBy?: RefreshTokenOrderByWithAggregationInput | RefreshTokenOrderByWithAggregationInput[] + by: RefreshTokenScalarFieldEnum[] | RefreshTokenScalarFieldEnum + having?: RefreshTokenScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: RefreshTokenCountAggregateInputType | true + _min?: RefreshTokenMinAggregateInputType + _max?: RefreshTokenMaxAggregateInputType + } + + export type RefreshTokenGroupByOutputType = { + id: string + tokenHash: string + userId: string + familyId: string + expiresAt: Date + revokedAt: Date | null + replacedByTokenId: string | null + createdAt: Date + _count: RefreshTokenCountAggregateOutputType | null + _min: RefreshTokenMinAggregateOutputType | null + _max: RefreshTokenMaxAggregateOutputType | null + } + + type GetRefreshTokenGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof RefreshTokenGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type RefreshTokenSelect = $Extensions.GetSelect<{ + id?: boolean + tokenHash?: boolean + userId?: boolean + familyId?: boolean + expiresAt?: boolean + revokedAt?: boolean + replacedByTokenId?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["refreshToken"]> + + export type RefreshTokenSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + tokenHash?: boolean + userId?: boolean + familyId?: boolean + expiresAt?: boolean + revokedAt?: boolean + replacedByTokenId?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["refreshToken"]> + + export type RefreshTokenSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + tokenHash?: boolean + userId?: boolean + familyId?: boolean + expiresAt?: boolean + revokedAt?: boolean + replacedByTokenId?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["refreshToken"]> + + export type RefreshTokenSelectScalar = { + id?: boolean + tokenHash?: boolean + userId?: boolean + familyId?: boolean + expiresAt?: boolean + revokedAt?: boolean + replacedByTokenId?: boolean + createdAt?: boolean + } + + export type RefreshTokenOmit = $Extensions.GetOmit<"id" | "tokenHash" | "userId" | "familyId" | "expiresAt" | "revokedAt" | "replacedByTokenId" | "createdAt", ExtArgs["result"]["refreshToken"]> + export type RefreshTokenInclude = { + user?: boolean | UserDefaultArgs + } + export type RefreshTokenIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + export type RefreshTokenIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + + export type $RefreshTokenPayload = { + name: "RefreshToken" + objects: { + user: Prisma.$UserPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + tokenHash: string + userId: string + familyId: string + expiresAt: Date + revokedAt: Date | null + replacedByTokenId: string | null + createdAt: Date + }, ExtArgs["result"]["refreshToken"]> + composites: {} + } + + type RefreshTokenGetPayload = $Result.GetResult + + type RefreshTokenCountArgs = + Omit & { + select?: RefreshTokenCountAggregateInputType | true + } + + export interface RefreshTokenDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['RefreshToken'], meta: { name: 'RefreshToken' } } + /** + * Find zero or one RefreshToken that matches the filter. + * @param {RefreshTokenFindUniqueArgs} args - Arguments to find a RefreshToken + * @example + * // Get one RefreshToken + * const refreshToken = await prisma.refreshToken.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__RefreshTokenClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one RefreshToken that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {RefreshTokenFindUniqueOrThrowArgs} args - Arguments to find a RefreshToken + * @example + * // Get one RefreshToken + * const refreshToken = await prisma.refreshToken.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__RefreshTokenClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first RefreshToken that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {RefreshTokenFindFirstArgs} args - Arguments to find a RefreshToken + * @example + * // Get one RefreshToken + * const refreshToken = await prisma.refreshToken.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__RefreshTokenClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first RefreshToken that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {RefreshTokenFindFirstOrThrowArgs} args - Arguments to find a RefreshToken + * @example + * // Get one RefreshToken + * const refreshToken = await prisma.refreshToken.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__RefreshTokenClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more RefreshTokens that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {RefreshTokenFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all RefreshTokens + * const refreshTokens = await prisma.refreshToken.findMany() + * + * // Get first 10 RefreshTokens + * const refreshTokens = await prisma.refreshToken.findMany({ take: 10 }) + * + * // Only select the `id` + * const refreshTokenWithIdOnly = await prisma.refreshToken.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a RefreshToken. + * @param {RefreshTokenCreateArgs} args - Arguments to create a RefreshToken. + * @example + * // Create one RefreshToken + * const RefreshToken = await prisma.refreshToken.create({ + * data: { + * // ... data to create a RefreshToken + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__RefreshTokenClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many RefreshTokens. + * @param {RefreshTokenCreateManyArgs} args - Arguments to create many RefreshTokens. + * @example + * // Create many RefreshTokens + * const refreshToken = await prisma.refreshToken.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many RefreshTokens and returns the data saved in the database. + * @param {RefreshTokenCreateManyAndReturnArgs} args - Arguments to create many RefreshTokens. + * @example + * // Create many RefreshTokens + * const refreshToken = await prisma.refreshToken.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many RefreshTokens and only return the `id` + * const refreshTokenWithIdOnly = await prisma.refreshToken.createManyAndReturn({ + * select: { id: true }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + createManyAndReturn(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a RefreshToken. + * @param {RefreshTokenDeleteArgs} args - Arguments to delete one RefreshToken. + * @example + * // Delete one RefreshToken + * const RefreshToken = await prisma.refreshToken.delete({ + * where: { + * // ... filter to delete one RefreshToken + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__RefreshTokenClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one RefreshToken. + * @param {RefreshTokenUpdateArgs} args - Arguments to update one RefreshToken. + * @example + * // Update one RefreshToken + * const refreshToken = await prisma.refreshToken.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__RefreshTokenClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more RefreshTokens. + * @param {RefreshTokenDeleteManyArgs} args - Arguments to filter RefreshTokens to delete. + * @example + * // Delete a few RefreshTokens + * const { count } = await prisma.refreshToken.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more RefreshTokens. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {RefreshTokenUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many RefreshTokens + * const refreshToken = await prisma.refreshToken.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more RefreshTokens and returns the data updated in the database. + * @param {RefreshTokenUpdateManyAndReturnArgs} args - Arguments to update many RefreshTokens. + * @example + * // Update many RefreshTokens + * const refreshToken = await prisma.refreshToken.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more RefreshTokens and only return the `id` + * const refreshTokenWithIdOnly = await prisma.refreshToken.updateManyAndReturn({ + * select: { id: true }, + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + updateManyAndReturn(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one RefreshToken. + * @param {RefreshTokenUpsertArgs} args - Arguments to update or create a RefreshToken. + * @example + * // Update or create a RefreshToken + * const refreshToken = await prisma.refreshToken.upsert({ + * create: { + * // ... data to create a RefreshToken + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the RefreshToken we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__RefreshTokenClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of RefreshTokens. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {RefreshTokenCountArgs} args - Arguments to filter RefreshTokens to count. + * @example + * // Count the number of RefreshTokens + * const count = await prisma.refreshToken.count({ + * where: { + * // ... the filter for the RefreshTokens we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a RefreshToken. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {RefreshTokenAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Subset): Prisma.PrismaPromise> + + /** + * Group by RefreshToken. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {RefreshTokenGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends RefreshTokenGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: RefreshTokenGroupByArgs['orderBy'] } + : { orderBy?: RefreshTokenGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + ByEmpty extends T['by'] extends never[] ? True : False, + InputErrors extends ByEmpty extends True + ? `Error: "by" must not be empty.` + : HavingValid extends False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ] + }[HavingFields] + : 'take' extends Keys + ? 'orderBy' extends Keys + ? ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Keys + ? 'orderBy' extends Keys + ? ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + >(args: SubsetIntersection & InputErrors): {} extends InputErrors ? GetRefreshTokenGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the RefreshToken model + */ + readonly fields: RefreshTokenFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for RefreshToken. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ + export interface Prisma__RefreshTokenClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise + } + + + + + /** + * Fields of the RefreshToken model + */ + interface RefreshTokenFieldRefs { + readonly id: FieldRef<"RefreshToken", 'String'> + readonly tokenHash: FieldRef<"RefreshToken", 'String'> + readonly userId: FieldRef<"RefreshToken", 'String'> + readonly familyId: FieldRef<"RefreshToken", 'String'> + readonly expiresAt: FieldRef<"RefreshToken", 'DateTime'> + readonly revokedAt: FieldRef<"RefreshToken", 'DateTime'> + readonly replacedByTokenId: FieldRef<"RefreshToken", 'String'> + readonly createdAt: FieldRef<"RefreshToken", 'DateTime'> + } + + + // Custom InputTypes + /** + * RefreshToken findUnique + */ + export type RefreshTokenFindUniqueArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + /** + * Filter, which RefreshToken to fetch. + */ + where: RefreshTokenWhereUniqueInput + } + + /** + * RefreshToken findUniqueOrThrow + */ + export type RefreshTokenFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + /** + * Filter, which RefreshToken to fetch. + */ + where: RefreshTokenWhereUniqueInput + } + + /** + * RefreshToken findFirst + */ + export type RefreshTokenFindFirstArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + /** + * Filter, which RefreshToken to fetch. + */ + where?: RefreshTokenWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of RefreshTokens to fetch. + */ + orderBy?: RefreshTokenOrderByWithRelationInput | RefreshTokenOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for RefreshTokens. + */ + cursor?: RefreshTokenWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` RefreshTokens from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` RefreshTokens. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of RefreshTokens. + */ + distinct?: RefreshTokenScalarFieldEnum | RefreshTokenScalarFieldEnum[] + } + + /** + * RefreshToken findFirstOrThrow + */ + export type RefreshTokenFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + /** + * Filter, which RefreshToken to fetch. + */ + where?: RefreshTokenWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of RefreshTokens to fetch. + */ + orderBy?: RefreshTokenOrderByWithRelationInput | RefreshTokenOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for RefreshTokens. + */ + cursor?: RefreshTokenWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` RefreshTokens from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` RefreshTokens. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of RefreshTokens. + */ + distinct?: RefreshTokenScalarFieldEnum | RefreshTokenScalarFieldEnum[] + } + + /** + * RefreshToken findMany + */ + export type RefreshTokenFindManyArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + /** + * Filter, which RefreshTokens to fetch. + */ + where?: RefreshTokenWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of RefreshTokens to fetch. + */ + orderBy?: RefreshTokenOrderByWithRelationInput | RefreshTokenOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing RefreshTokens. + */ + cursor?: RefreshTokenWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` RefreshTokens from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` RefreshTokens. + */ + skip?: number + distinct?: RefreshTokenScalarFieldEnum | RefreshTokenScalarFieldEnum[] + } + + /** + * RefreshToken create + */ + export type RefreshTokenCreateArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + /** + * The data needed to create a RefreshToken. + */ + data: XOR + } + + /** + * RefreshToken createMany + */ + export type RefreshTokenCreateManyArgs = { + /** + * The data used to create many RefreshTokens. + */ + data: RefreshTokenCreateManyInput | RefreshTokenCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * RefreshToken createManyAndReturn + */ + export type RefreshTokenCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelectCreateManyAndReturn | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * The data used to create many RefreshTokens. + */ + data: RefreshTokenCreateManyInput | RefreshTokenCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenIncludeCreateManyAndReturn | null + } + + /** + * RefreshToken update + */ + export type RefreshTokenUpdateArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + /** + * The data needed to update a RefreshToken. + */ + data: XOR + /** + * Choose, which RefreshToken to update. + */ + where: RefreshTokenWhereUniqueInput + } + + /** + * RefreshToken updateMany + */ + export type RefreshTokenUpdateManyArgs = { + /** + * The data used to update RefreshTokens. + */ + data: XOR + /** + * Filter which RefreshTokens to update + */ + where?: RefreshTokenWhereInput + /** + * Limit how many RefreshTokens to update. + */ + limit?: number + } + + /** + * RefreshToken updateManyAndReturn + */ + export type RefreshTokenUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * The data used to update RefreshTokens. + */ + data: XOR + /** + * Filter which RefreshTokens to update + */ + where?: RefreshTokenWhereInput + /** + * Limit how many RefreshTokens to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenIncludeUpdateManyAndReturn | null + } + + /** + * RefreshToken upsert + */ + export type RefreshTokenUpsertArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + /** + * The filter to search for the RefreshToken to update in case it exists. + */ + where: RefreshTokenWhereUniqueInput + /** + * In case the RefreshToken found by the `where` argument doesn't exist, create a new RefreshToken with this data. + */ + create: XOR + /** + * In case the RefreshToken was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * RefreshToken delete + */ + export type RefreshTokenDeleteArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + /** + * Filter which RefreshToken to delete. + */ + where: RefreshTokenWhereUniqueInput + } + + /** + * RefreshToken deleteMany + */ + export type RefreshTokenDeleteManyArgs = { + /** + * Filter which RefreshTokens to delete + */ + where?: RefreshTokenWhereInput + /** + * Limit how many RefreshTokens to delete. + */ + limit?: number + } + + /** + * RefreshToken without action + */ + export type RefreshTokenDefaultArgs = { + /** + * Select specific fields to fetch from the RefreshToken + */ + select?: RefreshTokenSelect | null + /** + * Omit specific fields from the RefreshToken + */ + omit?: RefreshTokenOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: RefreshTokenInclude | null + } + + /** * Model Team */ @@ -28870,6 +30095,20 @@ export namespace Prisma { export type SessionScalarFieldEnum = (typeof SessionScalarFieldEnum)[keyof typeof SessionScalarFieldEnum] + export const RefreshTokenScalarFieldEnum: { + id: 'id', + tokenHash: 'tokenHash', + userId: 'userId', + familyId: 'familyId', + expiresAt: 'expiresAt', + revokedAt: 'revokedAt', + replacedByTokenId: 'replacedByTokenId', + createdAt: 'createdAt' + }; + + export type RefreshTokenScalarFieldEnum = (typeof RefreshTokenScalarFieldEnum)[keyof typeof RefreshTokenScalarFieldEnum] + + export const TeamScalarFieldEnum: { id: 'id', name: 'name', @@ -30002,6 +31241,7 @@ export namespace Prisma { payments?: PaymentListRelationFilter quizSubmissions?: QuizSubmissionListRelationFilter goldenCards?: GoldenCardListRelationFilter + refreshTokens?: RefreshTokenListRelationFilter } export type UserOrderByWithRelationInput = { @@ -30017,6 +31257,7 @@ export namespace Prisma { payments?: PaymentOrderByRelationAggregateInput quizSubmissions?: QuizSubmissionOrderByRelationAggregateInput goldenCards?: GoldenCardOrderByRelationAggregateInput + refreshTokens?: RefreshTokenOrderByRelationAggregateInput } export type UserWhereUniqueInput = Prisma.AtLeast<{ @@ -30035,6 +31276,7 @@ export namespace Prisma { payments?: PaymentListRelationFilter quizSubmissions?: QuizSubmissionListRelationFilter goldenCards?: GoldenCardListRelationFilter + refreshTokens?: RefreshTokenListRelationFilter }, "id" | "email" | "phone"> export type UserOrderByWithAggregationInput = { @@ -30554,6 +31796,76 @@ export namespace Prisma { expires?: DateTimeWithAggregatesFilter<"Session"> | Date | string } + export type RefreshTokenWhereInput = { + AND?: RefreshTokenWhereInput | RefreshTokenWhereInput[] + OR?: RefreshTokenWhereInput[] + NOT?: RefreshTokenWhereInput | RefreshTokenWhereInput[] + id?: StringFilter<"RefreshToken"> | string + tokenHash?: StringFilter<"RefreshToken"> | string + userId?: StringFilter<"RefreshToken"> | string + familyId?: StringFilter<"RefreshToken"> | string + expiresAt?: DateTimeFilter<"RefreshToken"> | Date | string + revokedAt?: DateTimeNullableFilter<"RefreshToken"> | Date | string | null + replacedByTokenId?: StringNullableFilter<"RefreshToken"> | string | null + createdAt?: DateTimeFilter<"RefreshToken"> | Date | string + user?: XOR + } + + export type RefreshTokenOrderByWithRelationInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + familyId?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrderInput | SortOrder + replacedByTokenId?: SortOrderInput | SortOrder + createdAt?: SortOrder + user?: UserOrderByWithRelationInput + } + + export type RefreshTokenWhereUniqueInput = Prisma.AtLeast<{ + id?: string + tokenHash?: string + AND?: RefreshTokenWhereInput | RefreshTokenWhereInput[] + OR?: RefreshTokenWhereInput[] + NOT?: RefreshTokenWhereInput | RefreshTokenWhereInput[] + userId?: StringFilter<"RefreshToken"> | string + familyId?: StringFilter<"RefreshToken"> | string + expiresAt?: DateTimeFilter<"RefreshToken"> | Date | string + revokedAt?: DateTimeNullableFilter<"RefreshToken"> | Date | string | null + replacedByTokenId?: StringNullableFilter<"RefreshToken"> | string | null + createdAt?: DateTimeFilter<"RefreshToken"> | Date | string + user?: XOR + }, "id" | "tokenHash"> + + export type RefreshTokenOrderByWithAggregationInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + familyId?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrderInput | SortOrder + replacedByTokenId?: SortOrderInput | SortOrder + createdAt?: SortOrder + _count?: RefreshTokenCountOrderByAggregateInput + _max?: RefreshTokenMaxOrderByAggregateInput + _min?: RefreshTokenMinOrderByAggregateInput + } + + export type RefreshTokenScalarWhereWithAggregatesInput = { + AND?: RefreshTokenScalarWhereWithAggregatesInput | RefreshTokenScalarWhereWithAggregatesInput[] + OR?: RefreshTokenScalarWhereWithAggregatesInput[] + NOT?: RefreshTokenScalarWhereWithAggregatesInput | RefreshTokenScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"RefreshToken"> | string + tokenHash?: StringWithAggregatesFilter<"RefreshToken"> | string + userId?: StringWithAggregatesFilter<"RefreshToken"> | string + familyId?: StringWithAggregatesFilter<"RefreshToken"> | string + expiresAt?: DateTimeWithAggregatesFilter<"RefreshToken"> | Date | string + revokedAt?: DateTimeNullableWithAggregatesFilter<"RefreshToken"> | Date | string | null + replacedByTokenId?: StringNullableWithAggregatesFilter<"RefreshToken"> | string | null + createdAt?: DateTimeWithAggregatesFilter<"RefreshToken"> | Date | string + } + export type TeamWhereInput = { AND?: TeamWhereInput | TeamWhereInput[] OR?: TeamWhereInput[] @@ -31771,6 +33083,7 @@ export namespace Prisma { payments?: PaymentCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionCreateNestedManyWithoutUserInput goldenCards?: GoldenCardCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenCreateNestedManyWithoutUserInput } export type UserUncheckedCreateInput = { @@ -31786,6 +33099,7 @@ export namespace Prisma { payments?: PaymentUncheckedCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionUncheckedCreateNestedManyWithoutUserInput goldenCards?: GoldenCardUncheckedCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenUncheckedCreateNestedManyWithoutUserInput } export type UserUpdateInput = { @@ -31801,6 +33115,7 @@ export namespace Prisma { payments?: PaymentUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateInput = { @@ -31816,6 +33131,7 @@ export namespace Prisma { payments?: PaymentUncheckedUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUncheckedUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUncheckedUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUncheckedUpdateManyWithoutUserNestedInput } export type UserCreateManyInput = { @@ -32368,6 +33684,82 @@ export namespace Prisma { expires?: DateTimeFieldUpdateOperationsInput | Date | string } + export type RefreshTokenCreateInput = { + id?: string + tokenHash: string + familyId: string + expiresAt: Date | string + revokedAt?: Date | string | null + replacedByTokenId?: string | null + createdAt?: Date | string + user: UserCreateNestedOneWithoutRefreshTokensInput + } + + export type RefreshTokenUncheckedCreateInput = { + id?: string + tokenHash: string + userId: string + familyId: string + expiresAt: Date | string + revokedAt?: Date | string | null + replacedByTokenId?: string | null + createdAt?: Date | string + } + + export type RefreshTokenUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + familyId?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + replacedByTokenId?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutRefreshTokensNestedInput + } + + export type RefreshTokenUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + familyId?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + replacedByTokenId?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type RefreshTokenCreateManyInput = { + id?: string + tokenHash: string + userId: string + familyId: string + expiresAt: Date | string + revokedAt?: Date | string | null + replacedByTokenId?: string | null + createdAt?: Date | string + } + + export type RefreshTokenUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + familyId?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + replacedByTokenId?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type RefreshTokenUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + familyId?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + replacedByTokenId?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + export type TeamCreateInput = { id?: string name: string @@ -33543,6 +34935,12 @@ export namespace Prisma { none?: QuizSubmissionWhereInput } + export type RefreshTokenListRelationFilter = { + every?: RefreshTokenWhereInput + some?: RefreshTokenWhereInput + none?: RefreshTokenWhereInput + } + export type SessionOrderByRelationAggregateInput = { _count?: SortOrder } @@ -33555,6 +34953,10 @@ export namespace Prisma { _count?: SortOrder } + export type RefreshTokenOrderByRelationAggregateInput = { + _count?: SortOrder + } + export type UserCountOrderByAggregateInput = { id?: SortOrder name?: SortOrder @@ -33960,6 +35362,39 @@ export namespace Prisma { expires?: SortOrder } + export type RefreshTokenCountOrderByAggregateInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + familyId?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrder + replacedByTokenId?: SortOrder + createdAt?: SortOrder + } + + export type RefreshTokenMaxOrderByAggregateInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + familyId?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrder + replacedByTokenId?: SortOrder + createdAt?: SortOrder + } + + export type RefreshTokenMinOrderByAggregateInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + familyId?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrder + replacedByTokenId?: SortOrder + createdAt?: SortOrder + } + export type EnumTeamStatusFilter<$PrismaModel = never> = { equals?: $Enums.TeamStatus | EnumTeamStatusFieldRefInput<$PrismaModel> in?: $Enums.TeamStatus[] | ListEnumTeamStatusFieldRefInput<$PrismaModel> @@ -34936,6 +36371,13 @@ export namespace Prisma { connect?: GoldenCardWhereUniqueInput | GoldenCardWhereUniqueInput[] } + export type RefreshTokenCreateNestedManyWithoutUserInput = { + create?: XOR | RefreshTokenCreateWithoutUserInput[] | RefreshTokenUncheckedCreateWithoutUserInput[] + connectOrCreate?: RefreshTokenCreateOrConnectWithoutUserInput | RefreshTokenCreateOrConnectWithoutUserInput[] + createMany?: RefreshTokenCreateManyUserInputEnvelope + connect?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + } + export type TeamUncheckedCreateNestedOneWithoutUserInput = { create?: XOR connectOrCreate?: TeamCreateOrConnectWithoutUserInput @@ -34970,6 +36412,13 @@ export namespace Prisma { connect?: GoldenCardWhereUniqueInput | GoldenCardWhereUniqueInput[] } + export type RefreshTokenUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | RefreshTokenCreateWithoutUserInput[] | RefreshTokenUncheckedCreateWithoutUserInput[] + connectOrCreate?: RefreshTokenCreateOrConnectWithoutUserInput | RefreshTokenCreateOrConnectWithoutUserInput[] + createMany?: RefreshTokenCreateManyUserInputEnvelope + connect?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + } + export type EnumRoleFieldUpdateOperationsInput = { set?: $Enums.Role } @@ -35040,6 +36489,20 @@ export namespace Prisma { deleteMany?: GoldenCardScalarWhereInput | GoldenCardScalarWhereInput[] } + export type RefreshTokenUpdateManyWithoutUserNestedInput = { + create?: XOR | RefreshTokenCreateWithoutUserInput[] | RefreshTokenUncheckedCreateWithoutUserInput[] + connectOrCreate?: RefreshTokenCreateOrConnectWithoutUserInput | RefreshTokenCreateOrConnectWithoutUserInput[] + upsert?: RefreshTokenUpsertWithWhereUniqueWithoutUserInput | RefreshTokenUpsertWithWhereUniqueWithoutUserInput[] + createMany?: RefreshTokenCreateManyUserInputEnvelope + set?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + disconnect?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + delete?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + connect?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + update?: RefreshTokenUpdateWithWhereUniqueWithoutUserInput | RefreshTokenUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: RefreshTokenUpdateManyWithWhereWithoutUserInput | RefreshTokenUpdateManyWithWhereWithoutUserInput[] + deleteMany?: RefreshTokenScalarWhereInput | RefreshTokenScalarWhereInput[] + } + export type TeamUncheckedUpdateOneWithoutUserNestedInput = { create?: XOR connectOrCreate?: TeamCreateOrConnectWithoutUserInput @@ -35106,6 +36569,20 @@ export namespace Prisma { deleteMany?: GoldenCardScalarWhereInput | GoldenCardScalarWhereInput[] } + export type RefreshTokenUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | RefreshTokenCreateWithoutUserInput[] | RefreshTokenUncheckedCreateWithoutUserInput[] + connectOrCreate?: RefreshTokenCreateOrConnectWithoutUserInput | RefreshTokenCreateOrConnectWithoutUserInput[] + upsert?: RefreshTokenUpsertWithWhereUniqueWithoutUserInput | RefreshTokenUpsertWithWhereUniqueWithoutUserInput[] + createMany?: RefreshTokenCreateManyUserInputEnvelope + set?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + disconnect?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + delete?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + connect?: RefreshTokenWhereUniqueInput | RefreshTokenWhereUniqueInput[] + update?: RefreshTokenUpdateWithWhereUniqueWithoutUserInput | RefreshTokenUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: RefreshTokenUpdateManyWithWhereWithoutUserInput | RefreshTokenUpdateManyWithWhereWithoutUserInput[] + deleteMany?: RefreshTokenScalarWhereInput | RefreshTokenScalarWhereInput[] + } + export type NullableDateTimeFieldUpdateOperationsInput = { set?: Date | string | null } @@ -35394,6 +36871,20 @@ export namespace Prisma { update?: XOR, UserUncheckedUpdateWithoutSessionsInput> } + export type UserCreateNestedOneWithoutRefreshTokensInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutRefreshTokensInput + connect?: UserWhereUniqueInput + } + + export type UserUpdateOneRequiredWithoutRefreshTokensNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutRefreshTokensInput + upsert?: UserUpsertWithoutRefreshTokensInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutRefreshTokensInput> + } + export type UserCreateNestedOneWithoutTeamInput = { create?: XOR connectOrCreate?: UserCreateOrConnectWithoutTeamInput @@ -37853,6 +39344,36 @@ export namespace Prisma { skipDuplicates?: boolean } + export type RefreshTokenCreateWithoutUserInput = { + id?: string + tokenHash: string + familyId: string + expiresAt: Date | string + revokedAt?: Date | string | null + replacedByTokenId?: string | null + createdAt?: Date | string + } + + export type RefreshTokenUncheckedCreateWithoutUserInput = { + id?: string + tokenHash: string + familyId: string + expiresAt: Date | string + revokedAt?: Date | string | null + replacedByTokenId?: string | null + createdAt?: Date | string + } + + export type RefreshTokenCreateOrConnectWithoutUserInput = { + where: RefreshTokenWhereUniqueInput + create: XOR + } + + export type RefreshTokenCreateManyUserInputEnvelope = { + data: RefreshTokenCreateManyUserInput | RefreshTokenCreateManyUserInput[] + skipDuplicates?: boolean + } + export type TeamUpsertWithoutUserInput = { update: XOR create: XOR @@ -37988,6 +39509,36 @@ export namespace Prisma { data: XOR } + export type RefreshTokenUpsertWithWhereUniqueWithoutUserInput = { + where: RefreshTokenWhereUniqueInput + update: XOR + create: XOR + } + + export type RefreshTokenUpdateWithWhereUniqueWithoutUserInput = { + where: RefreshTokenWhereUniqueInput + data: XOR + } + + export type RefreshTokenUpdateManyWithWhereWithoutUserInput = { + where: RefreshTokenScalarWhereInput + data: XOR + } + + export type RefreshTokenScalarWhereInput = { + AND?: RefreshTokenScalarWhereInput | RefreshTokenScalarWhereInput[] + OR?: RefreshTokenScalarWhereInput[] + NOT?: RefreshTokenScalarWhereInput | RefreshTokenScalarWhereInput[] + id?: StringFilter<"RefreshToken"> | string + tokenHash?: StringFilter<"RefreshToken"> | string + userId?: StringFilter<"RefreshToken"> | string + familyId?: StringFilter<"RefreshToken"> | string + expiresAt?: DateTimeFilter<"RefreshToken"> | Date | string + revokedAt?: DateTimeNullableFilter<"RefreshToken"> | Date | string | null + replacedByTokenId?: StringNullableFilter<"RefreshToken"> | string | null + createdAt?: DateTimeFilter<"RefreshToken"> | Date | string + } + export type QuizQuestionCreateWithoutQuizInput = { id?: string questionText: string @@ -38232,6 +39783,7 @@ export namespace Prisma { sessions?: SessionCreateNestedManyWithoutUserInput payments?: PaymentCreateNestedManyWithoutUserInput goldenCards?: GoldenCardCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenCreateNestedManyWithoutUserInput } export type UserUncheckedCreateWithoutQuizSubmissionsInput = { @@ -38246,6 +39798,7 @@ export namespace Prisma { sessions?: SessionUncheckedCreateNestedManyWithoutUserInput payments?: PaymentUncheckedCreateNestedManyWithoutUserInput goldenCards?: GoldenCardUncheckedCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenUncheckedCreateNestedManyWithoutUserInput } export type UserCreateOrConnectWithoutQuizSubmissionsInput = { @@ -38315,6 +39868,7 @@ export namespace Prisma { sessions?: SessionUpdateManyWithoutUserNestedInput payments?: PaymentUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateWithoutQuizSubmissionsInput = { @@ -38329,6 +39883,7 @@ export namespace Prisma { sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput payments?: PaymentUncheckedUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUncheckedUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUncheckedUpdateManyWithoutUserNestedInput } export type DailyQuizUpsertWithoutSubmissionsInput = { @@ -38388,6 +39943,7 @@ export namespace Prisma { sessions?: SessionCreateNestedManyWithoutUserInput payments?: PaymentCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenCreateNestedManyWithoutUserInput } export type UserUncheckedCreateWithoutGoldenCardsInput = { @@ -38402,6 +39958,7 @@ export namespace Prisma { sessions?: SessionUncheckedCreateNestedManyWithoutUserInput payments?: PaymentUncheckedCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionUncheckedCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenUncheckedCreateNestedManyWithoutUserInput } export type UserCreateOrConnectWithoutGoldenCardsInput = { @@ -38535,6 +40092,7 @@ export namespace Prisma { sessions?: SessionUpdateManyWithoutUserNestedInput payments?: PaymentUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateWithoutGoldenCardsInput = { @@ -38549,6 +40107,7 @@ export namespace Prisma { sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput payments?: PaymentUncheckedUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUncheckedUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUncheckedUpdateManyWithoutUserNestedInput } export type DailyQuizUpsertWithoutAwardedCardsInput = { @@ -38684,6 +40243,7 @@ export namespace Prisma { payments?: PaymentCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionCreateNestedManyWithoutUserInput goldenCards?: GoldenCardCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenCreateNestedManyWithoutUserInput } export type UserUncheckedCreateWithoutSessionsInput = { @@ -38698,6 +40258,7 @@ export namespace Prisma { payments?: PaymentUncheckedCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionUncheckedCreateNestedManyWithoutUserInput goldenCards?: GoldenCardUncheckedCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenUncheckedCreateNestedManyWithoutUserInput } export type UserCreateOrConnectWithoutSessionsInput = { @@ -38728,6 +40289,7 @@ export namespace Prisma { payments?: PaymentUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateWithoutSessionsInput = { @@ -38742,6 +40304,83 @@ export namespace Prisma { payments?: PaymentUncheckedUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUncheckedUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUncheckedUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUncheckedUpdateManyWithoutUserNestedInput + } + + export type UserCreateWithoutRefreshTokensInput = { + id?: string + name?: string | null + email: string + phone?: string | null + password: string + role?: $Enums.Role + createdAt?: Date | string + team?: TeamCreateNestedOneWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + payments?: PaymentCreateNestedManyWithoutUserInput + quizSubmissions?: QuizSubmissionCreateNestedManyWithoutUserInput + goldenCards?: GoldenCardCreateNestedManyWithoutUserInput + } + + export type UserUncheckedCreateWithoutRefreshTokensInput = { + id?: string + name?: string | null + email: string + phone?: string | null + password: string + role?: $Enums.Role + createdAt?: Date | string + team?: TeamUncheckedCreateNestedOneWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + payments?: PaymentUncheckedCreateNestedManyWithoutUserInput + quizSubmissions?: QuizSubmissionUncheckedCreateNestedManyWithoutUserInput + goldenCards?: GoldenCardUncheckedCreateNestedManyWithoutUserInput + } + + export type UserCreateOrConnectWithoutRefreshTokensInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutRefreshTokensInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutRefreshTokensInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutRefreshTokensInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + email?: StringFieldUpdateOperationsInput | string + phone?: NullableStringFieldUpdateOperationsInput | string | null + password?: StringFieldUpdateOperationsInput | string + role?: EnumRoleFieldUpdateOperationsInput | $Enums.Role + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + team?: TeamUpdateOneWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + payments?: PaymentUpdateManyWithoutUserNestedInput + quizSubmissions?: QuizSubmissionUpdateManyWithoutUserNestedInput + goldenCards?: GoldenCardUpdateManyWithoutUserNestedInput + } + + export type UserUncheckedUpdateWithoutRefreshTokensInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + email?: StringFieldUpdateOperationsInput | string + phone?: NullableStringFieldUpdateOperationsInput | string | null + password?: StringFieldUpdateOperationsInput | string + role?: EnumRoleFieldUpdateOperationsInput | $Enums.Role + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + team?: TeamUncheckedUpdateOneWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + payments?: PaymentUncheckedUpdateManyWithoutUserNestedInput + quizSubmissions?: QuizSubmissionUncheckedUpdateManyWithoutUserNestedInput + goldenCards?: GoldenCardUncheckedUpdateManyWithoutUserNestedInput } export type UserCreateWithoutTeamInput = { @@ -38756,6 +40395,7 @@ export namespace Prisma { payments?: PaymentCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionCreateNestedManyWithoutUserInput goldenCards?: GoldenCardCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenCreateNestedManyWithoutUserInput } export type UserUncheckedCreateWithoutTeamInput = { @@ -38770,6 +40410,7 @@ export namespace Prisma { payments?: PaymentUncheckedCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionUncheckedCreateNestedManyWithoutUserInput goldenCards?: GoldenCardUncheckedCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenUncheckedCreateNestedManyWithoutUserInput } export type UserCreateOrConnectWithoutTeamInput = { @@ -38828,6 +40469,7 @@ export namespace Prisma { payments?: PaymentUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateWithoutTeamInput = { @@ -38842,6 +40484,7 @@ export namespace Prisma { payments?: PaymentUncheckedUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUncheckedUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUncheckedUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUncheckedUpdateManyWithoutUserNestedInput } export type TeamPlayerUpsertWithWhereUniqueWithoutTeamInput = { @@ -39132,6 +40775,7 @@ export namespace Prisma { sessions?: SessionCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionCreateNestedManyWithoutUserInput goldenCards?: GoldenCardCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenCreateNestedManyWithoutUserInput } export type UserUncheckedCreateWithoutPaymentsInput = { @@ -39146,6 +40790,7 @@ export namespace Prisma { sessions?: SessionUncheckedCreateNestedManyWithoutUserInput quizSubmissions?: QuizSubmissionUncheckedCreateNestedManyWithoutUserInput goldenCards?: GoldenCardUncheckedCreateNestedManyWithoutUserInput + refreshTokens?: RefreshTokenUncheckedCreateNestedManyWithoutUserInput } export type UserCreateOrConnectWithoutPaymentsInput = { @@ -39199,6 +40844,7 @@ export namespace Prisma { sessions?: SessionUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateWithoutPaymentsInput = { @@ -39213,6 +40859,7 @@ export namespace Prisma { sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput quizSubmissions?: QuizSubmissionUncheckedUpdateManyWithoutUserNestedInput goldenCards?: GoldenCardUncheckedUpdateManyWithoutUserNestedInput + refreshTokens?: RefreshTokenUncheckedUpdateManyWithoutUserNestedInput } export type PackageUpsertWithoutPaymentsInput = { @@ -40023,6 +41670,16 @@ export namespace Prisma { openedAt?: Date | string | null } + export type RefreshTokenCreateManyUserInput = { + id?: string + tokenHash: string + familyId: string + expiresAt: Date | string + revokedAt?: Date | string | null + replacedByTokenId?: string | null + createdAt?: Date | string + } + export type SessionUpdateWithoutUserInput = { id?: StringFieldUpdateOperationsInput | string sessionToken?: StringFieldUpdateOperationsInput | string @@ -40136,6 +41793,36 @@ export namespace Prisma { openedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null } + export type RefreshTokenUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + familyId?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + replacedByTokenId?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type RefreshTokenUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + familyId?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + replacedByTokenId?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type RefreshTokenUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + familyId?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + replacedByTokenId?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + export type QuizQuestionCreateManyQuizInput = { id?: string questionText: string diff --git a/lib/generated/prisma/index.js b/lib/generated/prisma/index.js index 02efcb4..0be45e0 100644 --- a/lib/generated/prisma/index.js +++ b/lib/generated/prisma/index.js @@ -302,6 +302,17 @@ exports.Prisma.SessionScalarFieldEnum = { expires: 'expires' }; +exports.Prisma.RefreshTokenScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + userId: 'userId', + familyId: 'familyId', + expiresAt: 'expiresAt', + revokedAt: 'revokedAt', + replacedByTokenId: 'replacedByTokenId', + createdAt: 'createdAt' +}; + exports.Prisma.TeamScalarFieldEnum = { id: 'id', name: 'name', @@ -452,6 +463,7 @@ exports.Prisma.ModelName = { QuizSubmission: 'QuizSubmission', GoldenCard: 'GoldenCard', Session: 'Session', + RefreshToken: 'RefreshToken', Team: 'Team', TeamPlayer: 'TeamPlayer', Package: 'Package', @@ -505,8 +517,8 @@ const config = { } } }, - "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n engineType = \"client\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum Position {\n GK\n DEF\n MID\n FWD\n}\n\nenum MatchStage {\n GROUP\n ROUND_OF_16\n QUARTER_FINAL\n SEMI_FINAL\n THIRD_PLACE\n FINAL\n}\n\nenum MatchStatus {\n SCHEDULED\n LIVE\n FINISHED\n}\n\nenum TeamStatus {\n PENDING\n APPROVED\n REJECTED\n ACTIVE\n INACTIVE\n}\n\nenum PaymentStatus {\n PENDING\n SUCCESS\n FAILED\n}\n\nenum CardTier {\n BRONZE\n SILVER\n GOLD\n}\n\nenum EventType {\n GOAL\n ASSIST\n YELLOW_CARD\n RED_CARD\n SECOND_YELLOW\n SUBSTITUTION_IN\n SUBSTITUTION_OUT\n INJURY_NO_SUB\n CLEAN_SHEET\n PENALTY_SAVED\n PENALTY_MISSED\n OWN_GOAL\n EXTRA_TIME_BONUS\n MOTM\n}\n\nmodel Country {\n id String @id @default(cuid())\n name String @unique\n code String @unique\n flagUrl String?\n flagImage String? // نام فایل پرچم مثل Flag_of_Australia.webp\n confederation String? // کنفدراسیون (UEFA, AFC, CAF, ...)\n qualificationMethod String? // شیوه راه‌یابی\n qualificationDate String? // تاریخ راه‌یابی\n participationHistory String? // سابقه شرکت\n bestResult String? // بهترین نتیجه\n description String? @db.Text // توضیحات کامل\n defaultFormation String @default(\"4-3-3\")\n defaultLineupPlayerIds String[] @default([])\n defaultCaptainId String? // شناسه کاپیتان پیش‌فرض\n group Group? @relation(fields: [groupId], references: [id])\n groupId String?\n isEliminated Boolean @default(false)\n players Player[]\n homeMatches Match[] @relation(\"HomeTeam\")\n awayMatches Match[] @relation(\"AwayTeam\")\n}\n\nmodel Group {\n id String @id @default(cuid())\n name String @unique\n countries Country[]\n}\n\nmodel Player {\n id String @id @default(cuid())\n name String\n image String? // نام فایل تصویر در public/uploads/players/\n position Position\n countryId String\n country Country @relation(fields: [countryId], references: [id])\n price Float @default(5.0)\n totalPoints Int @default(0)\n isActive Boolean @default(true)\n isGoldenCardEligible Boolean @default(false)\n cardTier CardTier @default(BRONZE)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n matchStats PlayerMatchStat[]\n teamPlayers TeamPlayer[]\n events MatchEvent[]\n goldenCards GoldenCard[]\n}\n\nmodel Match {\n id String @id @default(cuid())\n homeTeamId String\n awayTeamId String\n homeTeam Country @relation(\"HomeTeam\", fields: [homeTeamId], references: [id])\n awayTeam Country @relation(\"AwayTeam\", fields: [awayTeamId], references: [id])\n homeScore Int?\n awayScore Int?\n stage MatchStage @default(GROUP)\n status MatchStatus @default(SCHEDULED)\n matchDate DateTime\n matchDatePersian String? // تاریخ شمسی\n stadium String? // نام ورزشگاه\n city String? // شهر\n referee String? // داور اصلی\n assistant1 String? // کمک داور 1\n assistant2 String? // کمک داور 2\n fourthOfficial String? // داور چهارم\n attendance Int? // تعداد تماشاگر\n weather String? // وضعیت آب و هوا\n description String? @db.Text // توضیحات بازی\n roundId String?\n round Round? @relation(fields: [roundId], references: [id])\n playerStats PlayerMatchStat[]\n events MatchEvent[]\n lineups MatchLineup[]\n createdAt DateTime @default(now())\n}\n\nmodel Round {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n matches Match[]\n createdAt DateTime @default(now())\n}\n\nmodel Gameweek {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n createdAt DateTime @default(now())\n}\n\nmodel MatchEvent {\n id String @id @default(cuid())\n matchId String\n playerId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n type EventType\n minute Int?\n extraInfo String?\n createdAt DateTime @default(now())\n}\n\nmodel MatchLineup {\n id String @id @default(cuid())\n matchId String\n countryId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n formation String\n playerIds String[]\n}\n\nmodel PlayerMatchStat {\n id String @id @default(cuid())\n playerId String\n matchId String\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n goals Int @default(0)\n assists Int @default(0)\n yellowCards Int @default(0)\n redCards Int @default(0)\n minutesPlayed Int @default(0)\n cleanSheet Boolean @default(false)\n penaltySaved Int @default(0)\n penaltyMissed Int @default(0)\n ownGoals Int @default(0)\n isMotm Boolean @default(false)\n extraTimeBonus Int @default(0)\n points Int @default(0)\n\n @@unique([playerId, matchId])\n}\n\nmodel ScoringRule {\n id String @id @default(cuid())\n position Position\n eventType EventType\n points Int\n updatedAt DateTime @updatedAt\n updatedBy String?\n\n @@unique([position, eventType])\n}\n\nmodel User {\n id String @id @default(cuid())\n name String?\n email String @unique\n phone String? @unique\n password String\n role Role @default(USER)\n createdAt DateTime @default(now())\n team Team?\n sessions Session[]\n payments Payment[]\n quizSubmissions QuizSubmission[]\n goldenCards GoldenCard[]\n}\n\nmodel LoginOtp {\n id String @id @default(cuid())\n phone String\n codeHash String\n attempts Int @default(0)\n expiresAt DateTime\n consumedAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([phone, createdAt])\n}\n\nmodel FantasyNews {\n id String @id @default(cuid())\n icon String\n title String\n description String @db.Text\n newsTime DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([newsTime])\n}\n\nenum GoldenCardStatus {\n SEALED\n OPENED\n}\n\nenum SpecialCardState {\n IN_INVENTORY\n IN_TEAM\n SOLD\n}\n\nmodel DailyQuiz {\n id String @id @default(cuid())\n date DateTime @db.Date\n windowStart DateTime\n windowEnd DateTime\n goldWinnersCount Int @default(1)\n silverWinnersCount Int @default(0)\n bronzeWinnersCount Int @default(0)\n goldMinCorrect Int?\n silverMinCorrect Int?\n bronzeMinCorrect Int?\n isProcessed Boolean @default(false)\n createdAt DateTime @default(now())\n questions QuizQuestion[]\n submissions QuizSubmission[]\n awardedCards GoldenCard[]\n\n @@unique([date])\n}\n\nmodel QuizQuestion {\n id String @id @default(cuid())\n quizId String\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n questionText String\n options String[]\n correctAnswer Int // index of correct option (0-based)\n order Int @default(0)\n}\n\nmodel QuizSubmission {\n id String @id @default(cuid())\n userId String\n quizId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n answers Int[] // user's selected option indexes\n correctAnswers Int @default(0)\n score Int @default(0) // percentage 0-100\n submittedAt DateTime @default(now())\n\n @@unique([userId, quizId])\n}\n\nmodel GoldenCard {\n id String @id @default(cuid())\n userId String\n quizId String?\n playerId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz? @relation(fields: [quizId], references: [id], onDelete: SetNull)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n cardTier CardTier @default(GOLD)\n status GoldenCardStatus @default(SEALED)\n state SpecialCardState @default(IN_INVENTORY)\n acquiredDate DateTime @default(now())\n openedAt DateTime?\n teamPlayer TeamPlayer?\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionToken String @unique\n userId String\n expires DateTime\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n\nmodel Team {\n id String @id @default(cuid())\n name String\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n budget Float @default(100.0)\n totalPoints Int @default(0)\n formation String @default(\"4-3-3\")\n status TeamStatus @default(INACTIVE)\n createdAt DateTime @default(now())\n players TeamPlayer[]\n}\n\nmodel TeamPlayer {\n teamId String\n playerId String\n goldenCardId String? @unique\n isCaptain Boolean @default(false)\n isViceCaptain Boolean @default(false)\n isBench Boolean @default(false)\n positionIndex Int @default(0)\n team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n goldenCard GoldenCard? @relation(fields: [goldenCardId], references: [id], onDelete: SetNull)\n\n @@id([teamId, playerId])\n}\n\nmodel Package {\n id String @id @default(cuid())\n name String\n budgetBonus Float\n price Int\n description String?\n isActive Boolean @default(true)\n payments Payment[]\n}\n\nmodel Payment {\n id String @id @default(cuid())\n userId String\n packageId String\n user User @relation(fields: [userId], references: [id])\n package Package @relation(fields: [packageId], references: [id])\n amount Int\n authority String? @unique\n refId String?\n status PaymentStatus @default(PENDING)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", - "inlineSchemaHash": "97ad530f39fbd0a5b25054636137b2d4c6123d03a537c2ff3b9a51a4155369d0", + "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n engineType = \"client\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum Position {\n GK\n DEF\n MID\n FWD\n}\n\nenum MatchStage {\n GROUP\n ROUND_OF_16\n QUARTER_FINAL\n SEMI_FINAL\n THIRD_PLACE\n FINAL\n}\n\nenum MatchStatus {\n SCHEDULED\n LIVE\n FINISHED\n}\n\nenum TeamStatus {\n PENDING\n APPROVED\n REJECTED\n ACTIVE\n INACTIVE\n}\n\nenum PaymentStatus {\n PENDING\n SUCCESS\n FAILED\n}\n\nenum CardTier {\n BRONZE\n SILVER\n GOLD\n}\n\nenum EventType {\n GOAL\n ASSIST\n YELLOW_CARD\n RED_CARD\n SECOND_YELLOW\n SUBSTITUTION_IN\n SUBSTITUTION_OUT\n INJURY_NO_SUB\n CLEAN_SHEET\n PENALTY_SAVED\n PENALTY_MISSED\n OWN_GOAL\n EXTRA_TIME_BONUS\n MOTM\n}\n\nmodel Country {\n id String @id @default(cuid())\n name String @unique\n code String @unique\n flagUrl String?\n flagImage String? // نام فایل پرچم مثل Flag_of_Australia.webp\n confederation String? // کنفدراسیون (UEFA, AFC, CAF, ...)\n qualificationMethod String? // شیوه راه‌یابی\n qualificationDate String? // تاریخ راه‌یابی\n participationHistory String? // سابقه شرکت\n bestResult String? // بهترین نتیجه\n description String? @db.Text // توضیحات کامل\n defaultFormation String @default(\"4-3-3\")\n defaultLineupPlayerIds String[] @default([])\n defaultCaptainId String? // شناسه کاپیتان پیش‌فرض\n group Group? @relation(fields: [groupId], references: [id])\n groupId String?\n isEliminated Boolean @default(false)\n players Player[]\n homeMatches Match[] @relation(\"HomeTeam\")\n awayMatches Match[] @relation(\"AwayTeam\")\n}\n\nmodel Group {\n id String @id @default(cuid())\n name String @unique\n countries Country[]\n}\n\nmodel Player {\n id String @id @default(cuid())\n name String\n image String? // نام فایل تصویر در public/uploads/players/\n position Position\n countryId String\n country Country @relation(fields: [countryId], references: [id])\n price Float @default(5.0)\n totalPoints Int @default(0)\n isActive Boolean @default(true)\n isGoldenCardEligible Boolean @default(false)\n cardTier CardTier @default(BRONZE)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n matchStats PlayerMatchStat[]\n teamPlayers TeamPlayer[]\n events MatchEvent[]\n goldenCards GoldenCard[]\n}\n\nmodel Match {\n id String @id @default(cuid())\n homeTeamId String\n awayTeamId String\n homeTeam Country @relation(\"HomeTeam\", fields: [homeTeamId], references: [id])\n awayTeam Country @relation(\"AwayTeam\", fields: [awayTeamId], references: [id])\n homeScore Int?\n awayScore Int?\n stage MatchStage @default(GROUP)\n status MatchStatus @default(SCHEDULED)\n matchDate DateTime\n matchDatePersian String? // تاریخ شمسی\n stadium String? // نام ورزشگاه\n city String? // شهر\n referee String? // داور اصلی\n assistant1 String? // کمک داور 1\n assistant2 String? // کمک داور 2\n fourthOfficial String? // داور چهارم\n attendance Int? // تعداد تماشاگر\n weather String? // وضعیت آب و هوا\n description String? @db.Text // توضیحات بازی\n roundId String?\n round Round? @relation(fields: [roundId], references: [id])\n playerStats PlayerMatchStat[]\n events MatchEvent[]\n lineups MatchLineup[]\n createdAt DateTime @default(now())\n}\n\nmodel Round {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n matches Match[]\n createdAt DateTime @default(now())\n}\n\nmodel Gameweek {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n createdAt DateTime @default(now())\n}\n\nmodel MatchEvent {\n id String @id @default(cuid())\n matchId String\n playerId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n type EventType\n minute Int?\n extraInfo String?\n createdAt DateTime @default(now())\n}\n\nmodel MatchLineup {\n id String @id @default(cuid())\n matchId String\n countryId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n formation String\n playerIds String[]\n}\n\nmodel PlayerMatchStat {\n id String @id @default(cuid())\n playerId String\n matchId String\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n goals Int @default(0)\n assists Int @default(0)\n yellowCards Int @default(0)\n redCards Int @default(0)\n minutesPlayed Int @default(0)\n cleanSheet Boolean @default(false)\n penaltySaved Int @default(0)\n penaltyMissed Int @default(0)\n ownGoals Int @default(0)\n isMotm Boolean @default(false)\n extraTimeBonus Int @default(0)\n points Int @default(0)\n\n @@unique([playerId, matchId])\n}\n\nmodel ScoringRule {\n id String @id @default(cuid())\n position Position\n eventType EventType\n points Int\n updatedAt DateTime @updatedAt\n updatedBy String?\n\n @@unique([position, eventType])\n}\n\nmodel User {\n id String @id @default(cuid())\n name String?\n email String @unique\n phone String? @unique\n password String\n role Role @default(USER)\n createdAt DateTime @default(now())\n team Team?\n sessions Session[]\n payments Payment[]\n quizSubmissions QuizSubmission[]\n goldenCards GoldenCard[]\n refreshTokens RefreshToken[]\n}\n\nmodel LoginOtp {\n id String @id @default(cuid())\n phone String\n codeHash String\n attempts Int @default(0)\n expiresAt DateTime\n consumedAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([phone, createdAt])\n}\n\nmodel FantasyNews {\n id String @id @default(cuid())\n icon String\n title String\n description String @db.Text\n newsTime DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([newsTime])\n}\n\nenum GoldenCardStatus {\n SEALED\n OPENED\n}\n\nenum SpecialCardState {\n IN_INVENTORY\n IN_TEAM\n SOLD\n}\n\nmodel DailyQuiz {\n id String @id @default(cuid())\n date DateTime @db.Date\n windowStart DateTime\n windowEnd DateTime\n goldWinnersCount Int @default(1)\n silverWinnersCount Int @default(0)\n bronzeWinnersCount Int @default(0)\n goldMinCorrect Int?\n silverMinCorrect Int?\n bronzeMinCorrect Int?\n isProcessed Boolean @default(false)\n createdAt DateTime @default(now())\n questions QuizQuestion[]\n submissions QuizSubmission[]\n awardedCards GoldenCard[]\n\n @@unique([date])\n}\n\nmodel QuizQuestion {\n id String @id @default(cuid())\n quizId String\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n questionText String\n options String[]\n correctAnswer Int // index of correct option (0-based)\n order Int @default(0)\n}\n\nmodel QuizSubmission {\n id String @id @default(cuid())\n userId String\n quizId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n answers Int[] // user's selected option indexes\n correctAnswers Int @default(0)\n score Int @default(0) // percentage 0-100\n submittedAt DateTime @default(now())\n\n @@unique([userId, quizId])\n}\n\nmodel GoldenCard {\n id String @id @default(cuid())\n userId String\n quizId String?\n playerId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz? @relation(fields: [quizId], references: [id], onDelete: SetNull)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n cardTier CardTier @default(GOLD)\n status GoldenCardStatus @default(SEALED)\n state SpecialCardState @default(IN_INVENTORY)\n acquiredDate DateTime @default(now())\n openedAt DateTime?\n teamPlayer TeamPlayer?\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionToken String @unique\n userId String\n expires DateTime\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n\nmodel RefreshToken {\n id String @id @default(cuid())\n tokenHash String @unique\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n familyId String\n expiresAt DateTime\n revokedAt DateTime?\n replacedByTokenId String?\n createdAt DateTime @default(now())\n\n @@index([userId])\n @@index([familyId])\n @@index([expiresAt])\n}\n\nmodel Team {\n id String @id @default(cuid())\n name String\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n budget Float @default(100.0)\n totalPoints Int @default(0)\n formation String @default(\"4-3-3\")\n status TeamStatus @default(INACTIVE)\n createdAt DateTime @default(now())\n players TeamPlayer[]\n}\n\nmodel TeamPlayer {\n teamId String\n playerId String\n goldenCardId String? @unique\n isCaptain Boolean @default(false)\n isViceCaptain Boolean @default(false)\n isBench Boolean @default(false)\n positionIndex Int @default(0)\n team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n goldenCard GoldenCard? @relation(fields: [goldenCardId], references: [id], onDelete: SetNull)\n\n @@id([teamId, playerId])\n}\n\nmodel Package {\n id String @id @default(cuid())\n name String\n budgetBonus Float\n price Int\n description String?\n isActive Boolean @default(true)\n payments Payment[]\n}\n\nmodel Payment {\n id String @id @default(cuid())\n userId String\n packageId String\n user User @relation(fields: [userId], references: [id])\n package Package @relation(fields: [packageId], references: [id])\n amount Int\n authority String? @unique\n refId String?\n status PaymentStatus @default(PENDING)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", + "inlineSchemaHash": "98e4715edb3236c358ee74dae87fa24e5d460352b7c3893e002809316206b601", "copyEngine": true } @@ -527,7 +539,7 @@ if (!fs.existsSync(path.join(__dirname, 'schema.prisma'))) { config.isBundled = true } -config.runtimeDataModel = JSON.parse("{\"models\":{\"Country\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"flagUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"flagImage\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"confederation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qualificationMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qualificationDate\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"participationHistory\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bestResult\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultFormation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultLineupPlayerIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultCaptainId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"CountryToGroup\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isEliminated\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"players\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"CountryToPlayer\"},{\"name\":\"homeMatches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"HomeTeam\"},{\"name\":\"awayMatches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"AwayTeam\"}],\"dbName\":null},\"Group\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countries\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"CountryToGroup\"}],\"dbName\":null},\"Player\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"enum\",\"type\":\"Position\"},{\"name\":\"countryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"CountryToPlayer\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isGoldenCardEligible\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"cardTier\",\"kind\":\"enum\",\"type\":\"CardTier\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matchStats\",\"kind\":\"object\",\"type\":\"PlayerMatchStat\",\"relationName\":\"PlayerToPlayerMatchStat\"},{\"name\":\"teamPlayers\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"PlayerToTeamPlayer\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"MatchEvent\",\"relationName\":\"MatchEventToPlayer\"},{\"name\":\"goldenCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToPlayer\"}],\"dbName\":null},\"Match\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeTeamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"awayTeamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeTeam\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"HomeTeam\"},{\"name\":\"awayTeam\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"AwayTeam\"},{\"name\":\"homeScore\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"awayScore\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"stage\",\"kind\":\"enum\",\"type\":\"MatchStage\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"MatchStatus\"},{\"name\":\"matchDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matchDatePersian\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stadium\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"referee\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"assistant1\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"assistant2\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fourthOfficial\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attendance\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"weather\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roundId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"round\",\"kind\":\"object\",\"type\":\"Round\",\"relationName\":\"MatchToRound\"},{\"name\":\"playerStats\",\"kind\":\"object\",\"type\":\"PlayerMatchStat\",\"relationName\":\"MatchToPlayerMatchStat\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"MatchEvent\",\"relationName\":\"MatchToMatchEvent\"},{\"name\":\"lineups\",\"kind\":\"object\",\"type\":\"MatchLineup\",\"relationName\":\"MatchToMatchLineup\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Round\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"number\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deadline\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToRound\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Gameweek\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"number\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deadline\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MatchEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToMatchEvent\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"MatchEventToPlayer\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"minute\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"extraInfo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MatchLineup\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToMatchLineup\"},{\"name\":\"formation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerIds\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"PlayerMatchStat\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"PlayerToPlayerMatchStat\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToPlayerMatchStat\"},{\"name\":\"goals\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"assists\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"yellowCards\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"redCards\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"minutesPlayed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cleanSheet\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"penaltySaved\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"penaltyMissed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"ownGoals\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isMotm\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"extraTimeBonus\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"points\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null},\"ScoringRule\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"enum\",\"type\":\"Position\"},{\"name\":\"eventType\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"points\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"team\",\"kind\":\"object\",\"type\":\"Team\",\"relationName\":\"TeamToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToUser\"},{\"name\":\"quizSubmissions\",\"kind\":\"object\",\"type\":\"QuizSubmission\",\"relationName\":\"QuizSubmissionToUser\"},{\"name\":\"goldenCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToUser\"}],\"dbName\":null},\"LoginOtp\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"codeHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attempts\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"consumedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"FantasyNews\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"icon\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"newsTime\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"DailyQuiz\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"windowStart\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"windowEnd\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"goldWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"silverWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"bronzeWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"goldMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"silverMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"bronzeMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isProcessed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"questions\",\"kind\":\"object\",\"type\":\"QuizQuestion\",\"relationName\":\"DailyQuizToQuizQuestion\"},{\"name\":\"submissions\",\"kind\":\"object\",\"type\":\"QuizSubmission\",\"relationName\":\"DailyQuizToQuizSubmission\"},{\"name\":\"awardedCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"DailyQuizToGoldenCard\"}],\"dbName\":null},\"QuizQuestion\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToQuizQuestion\"},{\"name\":\"questionText\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"options\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"correctAnswer\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null},\"QuizSubmission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"QuizSubmissionToUser\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToQuizSubmission\"},{\"name\":\"answers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"correctAnswers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"score\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"submittedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"GoldenCard\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"GoldenCardToUser\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToGoldenCard\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"GoldenCardToPlayer\"},{\"name\":\"cardTier\",\"kind\":\"enum\",\"type\":\"CardTier\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"GoldenCardStatus\"},{\"name\":\"state\",\"kind\":\"enum\",\"type\":\"SpecialCardState\"},{\"name\":\"acquiredDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"openedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"teamPlayer\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"GoldenCardToTeamPlayer\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":null},\"Team\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TeamToUser\"},{\"name\":\"budget\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"formation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"TeamStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"players\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"TeamToTeamPlayer\"}],\"dbName\":null},\"TeamPlayer\":{\"fields\":[{\"name\":\"teamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"goldenCardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isCaptain\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isViceCaptain\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isBench\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"positionIndex\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"team\",\"kind\":\"object\",\"type\":\"Team\",\"relationName\":\"TeamToTeamPlayer\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"PlayerToTeamPlayer\"},{\"name\":\"goldenCard\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToTeamPlayer\"}],\"dbName\":null},\"Package\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"budgetBonus\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PackageToPayment\"}],\"dbName\":null},\"Payment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"packageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PaymentToUser\"},{\"name\":\"package\",\"kind\":\"object\",\"type\":\"Package\",\"relationName\":\"PackageToPayment\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"authority\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"PaymentStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Country\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"flagUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"flagImage\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"confederation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qualificationMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qualificationDate\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"participationHistory\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bestResult\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultFormation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultLineupPlayerIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultCaptainId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"CountryToGroup\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isEliminated\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"players\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"CountryToPlayer\"},{\"name\":\"homeMatches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"HomeTeam\"},{\"name\":\"awayMatches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"AwayTeam\"}],\"dbName\":null},\"Group\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countries\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"CountryToGroup\"}],\"dbName\":null},\"Player\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"enum\",\"type\":\"Position\"},{\"name\":\"countryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"CountryToPlayer\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isGoldenCardEligible\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"cardTier\",\"kind\":\"enum\",\"type\":\"CardTier\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matchStats\",\"kind\":\"object\",\"type\":\"PlayerMatchStat\",\"relationName\":\"PlayerToPlayerMatchStat\"},{\"name\":\"teamPlayers\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"PlayerToTeamPlayer\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"MatchEvent\",\"relationName\":\"MatchEventToPlayer\"},{\"name\":\"goldenCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToPlayer\"}],\"dbName\":null},\"Match\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeTeamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"awayTeamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeTeam\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"HomeTeam\"},{\"name\":\"awayTeam\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"AwayTeam\"},{\"name\":\"homeScore\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"awayScore\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"stage\",\"kind\":\"enum\",\"type\":\"MatchStage\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"MatchStatus\"},{\"name\":\"matchDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matchDatePersian\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stadium\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"referee\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"assistant1\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"assistant2\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fourthOfficial\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attendance\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"weather\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roundId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"round\",\"kind\":\"object\",\"type\":\"Round\",\"relationName\":\"MatchToRound\"},{\"name\":\"playerStats\",\"kind\":\"object\",\"type\":\"PlayerMatchStat\",\"relationName\":\"MatchToPlayerMatchStat\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"MatchEvent\",\"relationName\":\"MatchToMatchEvent\"},{\"name\":\"lineups\",\"kind\":\"object\",\"type\":\"MatchLineup\",\"relationName\":\"MatchToMatchLineup\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Round\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"number\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deadline\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToRound\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Gameweek\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"number\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deadline\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MatchEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToMatchEvent\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"MatchEventToPlayer\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"minute\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"extraInfo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MatchLineup\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToMatchLineup\"},{\"name\":\"formation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerIds\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"PlayerMatchStat\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"PlayerToPlayerMatchStat\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToPlayerMatchStat\"},{\"name\":\"goals\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"assists\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"yellowCards\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"redCards\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"minutesPlayed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cleanSheet\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"penaltySaved\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"penaltyMissed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"ownGoals\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isMotm\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"extraTimeBonus\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"points\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null},\"ScoringRule\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"enum\",\"type\":\"Position\"},{\"name\":\"eventType\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"points\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"team\",\"kind\":\"object\",\"type\":\"Team\",\"relationName\":\"TeamToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToUser\"},{\"name\":\"quizSubmissions\",\"kind\":\"object\",\"type\":\"QuizSubmission\",\"relationName\":\"QuizSubmissionToUser\"},{\"name\":\"goldenCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToUser\"},{\"name\":\"refreshTokens\",\"kind\":\"object\",\"type\":\"RefreshToken\",\"relationName\":\"RefreshTokenToUser\"}],\"dbName\":null},\"LoginOtp\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"codeHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attempts\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"consumedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"FantasyNews\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"icon\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"newsTime\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"DailyQuiz\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"windowStart\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"windowEnd\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"goldWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"silverWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"bronzeWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"goldMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"silverMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"bronzeMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isProcessed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"questions\",\"kind\":\"object\",\"type\":\"QuizQuestion\",\"relationName\":\"DailyQuizToQuizQuestion\"},{\"name\":\"submissions\",\"kind\":\"object\",\"type\":\"QuizSubmission\",\"relationName\":\"DailyQuizToQuizSubmission\"},{\"name\":\"awardedCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"DailyQuizToGoldenCard\"}],\"dbName\":null},\"QuizQuestion\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToQuizQuestion\"},{\"name\":\"questionText\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"options\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"correctAnswer\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null},\"QuizSubmission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"QuizSubmissionToUser\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToQuizSubmission\"},{\"name\":\"answers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"correctAnswers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"score\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"submittedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"GoldenCard\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"GoldenCardToUser\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToGoldenCard\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"GoldenCardToPlayer\"},{\"name\":\"cardTier\",\"kind\":\"enum\",\"type\":\"CardTier\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"GoldenCardStatus\"},{\"name\":\"state\",\"kind\":\"enum\",\"type\":\"SpecialCardState\"},{\"name\":\"acquiredDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"openedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"teamPlayer\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"GoldenCardToTeamPlayer\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":null},\"RefreshToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"RefreshTokenToUser\"},{\"name\":\"familyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"revokedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"replacedByTokenId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Team\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TeamToUser\"},{\"name\":\"budget\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"formation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"TeamStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"players\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"TeamToTeamPlayer\"}],\"dbName\":null},\"TeamPlayer\":{\"fields\":[{\"name\":\"teamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"goldenCardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isCaptain\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isViceCaptain\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isBench\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"positionIndex\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"team\",\"kind\":\"object\",\"type\":\"Team\",\"relationName\":\"TeamToTeamPlayer\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"PlayerToTeamPlayer\"},{\"name\":\"goldenCard\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToTeamPlayer\"}],\"dbName\":null},\"Package\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"budgetBonus\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PackageToPayment\"}],\"dbName\":null},\"Payment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"packageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PaymentToUser\"},{\"name\":\"package\",\"kind\":\"object\",\"type\":\"Package\",\"relationName\":\"PackageToPayment\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"authority\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"PaymentStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.engineWasm = undefined config.compilerWasm = { diff --git a/lib/generated/prisma/package.json b/lib/generated/prisma/package.json index b02605c..758492b 100644 --- a/lib/generated/prisma/package.json +++ b/lib/generated/prisma/package.json @@ -1,5 +1,5 @@ { - "name": "prisma-client-49385eb0fcdd57042a26789a1a38ea389dc814b2f500cfcebcca17b00a9cad78", + "name": "prisma-client-1872f15576a497df0517238e6417c6ebddb069c572b364759dc6f25c1f09503c", "main": "index.js", "types": "index.d.ts", "browser": "default.js", diff --git a/lib/generated/prisma/schema.prisma b/lib/generated/prisma/schema.prisma index e90dc32..4973985 100644 --- a/lib/generated/prisma/schema.prisma +++ b/lib/generated/prisma/schema.prisma @@ -237,6 +237,7 @@ model User { payments Payment[] quizSubmissions QuizSubmission[] goldenCards GoldenCard[] + refreshTokens RefreshToken[] } model LoginOtp { @@ -342,6 +343,22 @@ model Session { user User @relation(fields: [userId], references: [id], onDelete: Cascade) } +model RefreshToken { + id String @id @default(cuid()) + tokenHash String @unique + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + familyId String + expiresAt DateTime + revokedAt DateTime? + replacedByTokenId String? + createdAt DateTime @default(now()) + + @@index([userId]) + @@index([familyId]) + @@index([expiresAt]) +} + model Team { id String @id @default(cuid()) name String diff --git a/lib/generated/prisma/wasm.js b/lib/generated/prisma/wasm.js index fb0a7b1..93f178c 100644 --- a/lib/generated/prisma/wasm.js +++ b/lib/generated/prisma/wasm.js @@ -301,6 +301,17 @@ exports.Prisma.SessionScalarFieldEnum = { expires: 'expires' }; +exports.Prisma.RefreshTokenScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + userId: 'userId', + familyId: 'familyId', + expiresAt: 'expiresAt', + revokedAt: 'revokedAt', + replacedByTokenId: 'replacedByTokenId', + createdAt: 'createdAt' +}; + exports.Prisma.TeamScalarFieldEnum = { id: 'id', name: 'name', @@ -451,6 +462,7 @@ exports.Prisma.ModelName = { QuizSubmission: 'QuizSubmission', GoldenCard: 'GoldenCard', Session: 'Session', + RefreshToken: 'RefreshToken', Team: 'Team', TeamPlayer: 'TeamPlayer', Package: 'Package', @@ -504,13 +516,13 @@ const config = { } } }, - "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n engineType = \"client\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum Position {\n GK\n DEF\n MID\n FWD\n}\n\nenum MatchStage {\n GROUP\n ROUND_OF_16\n QUARTER_FINAL\n SEMI_FINAL\n THIRD_PLACE\n FINAL\n}\n\nenum MatchStatus {\n SCHEDULED\n LIVE\n FINISHED\n}\n\nenum TeamStatus {\n PENDING\n APPROVED\n REJECTED\n ACTIVE\n INACTIVE\n}\n\nenum PaymentStatus {\n PENDING\n SUCCESS\n FAILED\n}\n\nenum CardTier {\n BRONZE\n SILVER\n GOLD\n}\n\nenum EventType {\n GOAL\n ASSIST\n YELLOW_CARD\n RED_CARD\n SECOND_YELLOW\n SUBSTITUTION_IN\n SUBSTITUTION_OUT\n INJURY_NO_SUB\n CLEAN_SHEET\n PENALTY_SAVED\n PENALTY_MISSED\n OWN_GOAL\n EXTRA_TIME_BONUS\n MOTM\n}\n\nmodel Country {\n id String @id @default(cuid())\n name String @unique\n code String @unique\n flagUrl String?\n flagImage String? // نام فایل پرچم مثل Flag_of_Australia.webp\n confederation String? // کنفدراسیون (UEFA, AFC, CAF, ...)\n qualificationMethod String? // شیوه راه‌یابی\n qualificationDate String? // تاریخ راه‌یابی\n participationHistory String? // سابقه شرکت\n bestResult String? // بهترین نتیجه\n description String? @db.Text // توضیحات کامل\n defaultFormation String @default(\"4-3-3\")\n defaultLineupPlayerIds String[] @default([])\n defaultCaptainId String? // شناسه کاپیتان پیش‌فرض\n group Group? @relation(fields: [groupId], references: [id])\n groupId String?\n isEliminated Boolean @default(false)\n players Player[]\n homeMatches Match[] @relation(\"HomeTeam\")\n awayMatches Match[] @relation(\"AwayTeam\")\n}\n\nmodel Group {\n id String @id @default(cuid())\n name String @unique\n countries Country[]\n}\n\nmodel Player {\n id String @id @default(cuid())\n name String\n image String? // نام فایل تصویر در public/uploads/players/\n position Position\n countryId String\n country Country @relation(fields: [countryId], references: [id])\n price Float @default(5.0)\n totalPoints Int @default(0)\n isActive Boolean @default(true)\n isGoldenCardEligible Boolean @default(false)\n cardTier CardTier @default(BRONZE)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n matchStats PlayerMatchStat[]\n teamPlayers TeamPlayer[]\n events MatchEvent[]\n goldenCards GoldenCard[]\n}\n\nmodel Match {\n id String @id @default(cuid())\n homeTeamId String\n awayTeamId String\n homeTeam Country @relation(\"HomeTeam\", fields: [homeTeamId], references: [id])\n awayTeam Country @relation(\"AwayTeam\", fields: [awayTeamId], references: [id])\n homeScore Int?\n awayScore Int?\n stage MatchStage @default(GROUP)\n status MatchStatus @default(SCHEDULED)\n matchDate DateTime\n matchDatePersian String? // تاریخ شمسی\n stadium String? // نام ورزشگاه\n city String? // شهر\n referee String? // داور اصلی\n assistant1 String? // کمک داور 1\n assistant2 String? // کمک داور 2\n fourthOfficial String? // داور چهارم\n attendance Int? // تعداد تماشاگر\n weather String? // وضعیت آب و هوا\n description String? @db.Text // توضیحات بازی\n roundId String?\n round Round? @relation(fields: [roundId], references: [id])\n playerStats PlayerMatchStat[]\n events MatchEvent[]\n lineups MatchLineup[]\n createdAt DateTime @default(now())\n}\n\nmodel Round {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n matches Match[]\n createdAt DateTime @default(now())\n}\n\nmodel Gameweek {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n createdAt DateTime @default(now())\n}\n\nmodel MatchEvent {\n id String @id @default(cuid())\n matchId String\n playerId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n type EventType\n minute Int?\n extraInfo String?\n createdAt DateTime @default(now())\n}\n\nmodel MatchLineup {\n id String @id @default(cuid())\n matchId String\n countryId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n formation String\n playerIds String[]\n}\n\nmodel PlayerMatchStat {\n id String @id @default(cuid())\n playerId String\n matchId String\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n goals Int @default(0)\n assists Int @default(0)\n yellowCards Int @default(0)\n redCards Int @default(0)\n minutesPlayed Int @default(0)\n cleanSheet Boolean @default(false)\n penaltySaved Int @default(0)\n penaltyMissed Int @default(0)\n ownGoals Int @default(0)\n isMotm Boolean @default(false)\n extraTimeBonus Int @default(0)\n points Int @default(0)\n\n @@unique([playerId, matchId])\n}\n\nmodel ScoringRule {\n id String @id @default(cuid())\n position Position\n eventType EventType\n points Int\n updatedAt DateTime @updatedAt\n updatedBy String?\n\n @@unique([position, eventType])\n}\n\nmodel User {\n id String @id @default(cuid())\n name String?\n email String @unique\n phone String? @unique\n password String\n role Role @default(USER)\n createdAt DateTime @default(now())\n team Team?\n sessions Session[]\n payments Payment[]\n quizSubmissions QuizSubmission[]\n goldenCards GoldenCard[]\n}\n\nmodel LoginOtp {\n id String @id @default(cuid())\n phone String\n codeHash String\n attempts Int @default(0)\n expiresAt DateTime\n consumedAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([phone, createdAt])\n}\n\nmodel FantasyNews {\n id String @id @default(cuid())\n icon String\n title String\n description String @db.Text\n newsTime DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([newsTime])\n}\n\nenum GoldenCardStatus {\n SEALED\n OPENED\n}\n\nenum SpecialCardState {\n IN_INVENTORY\n IN_TEAM\n SOLD\n}\n\nmodel DailyQuiz {\n id String @id @default(cuid())\n date DateTime @db.Date\n windowStart DateTime\n windowEnd DateTime\n goldWinnersCount Int @default(1)\n silverWinnersCount Int @default(0)\n bronzeWinnersCount Int @default(0)\n goldMinCorrect Int?\n silverMinCorrect Int?\n bronzeMinCorrect Int?\n isProcessed Boolean @default(false)\n createdAt DateTime @default(now())\n questions QuizQuestion[]\n submissions QuizSubmission[]\n awardedCards GoldenCard[]\n\n @@unique([date])\n}\n\nmodel QuizQuestion {\n id String @id @default(cuid())\n quizId String\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n questionText String\n options String[]\n correctAnswer Int // index of correct option (0-based)\n order Int @default(0)\n}\n\nmodel QuizSubmission {\n id String @id @default(cuid())\n userId String\n quizId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n answers Int[] // user's selected option indexes\n correctAnswers Int @default(0)\n score Int @default(0) // percentage 0-100\n submittedAt DateTime @default(now())\n\n @@unique([userId, quizId])\n}\n\nmodel GoldenCard {\n id String @id @default(cuid())\n userId String\n quizId String?\n playerId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz? @relation(fields: [quizId], references: [id], onDelete: SetNull)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n cardTier CardTier @default(GOLD)\n status GoldenCardStatus @default(SEALED)\n state SpecialCardState @default(IN_INVENTORY)\n acquiredDate DateTime @default(now())\n openedAt DateTime?\n teamPlayer TeamPlayer?\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionToken String @unique\n userId String\n expires DateTime\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n\nmodel Team {\n id String @id @default(cuid())\n name String\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n budget Float @default(100.0)\n totalPoints Int @default(0)\n formation String @default(\"4-3-3\")\n status TeamStatus @default(INACTIVE)\n createdAt DateTime @default(now())\n players TeamPlayer[]\n}\n\nmodel TeamPlayer {\n teamId String\n playerId String\n goldenCardId String? @unique\n isCaptain Boolean @default(false)\n isViceCaptain Boolean @default(false)\n isBench Boolean @default(false)\n positionIndex Int @default(0)\n team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n goldenCard GoldenCard? @relation(fields: [goldenCardId], references: [id], onDelete: SetNull)\n\n @@id([teamId, playerId])\n}\n\nmodel Package {\n id String @id @default(cuid())\n name String\n budgetBonus Float\n price Int\n description String?\n isActive Boolean @default(true)\n payments Payment[]\n}\n\nmodel Payment {\n id String @id @default(cuid())\n userId String\n packageId String\n user User @relation(fields: [userId], references: [id])\n package Package @relation(fields: [packageId], references: [id])\n amount Int\n authority String? @unique\n refId String?\n status PaymentStatus @default(PENDING)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", - "inlineSchemaHash": "97ad530f39fbd0a5b25054636137b2d4c6123d03a537c2ff3b9a51a4155369d0", + "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n engineType = \"client\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum Position {\n GK\n DEF\n MID\n FWD\n}\n\nenum MatchStage {\n GROUP\n ROUND_OF_16\n QUARTER_FINAL\n SEMI_FINAL\n THIRD_PLACE\n FINAL\n}\n\nenum MatchStatus {\n SCHEDULED\n LIVE\n FINISHED\n}\n\nenum TeamStatus {\n PENDING\n APPROVED\n REJECTED\n ACTIVE\n INACTIVE\n}\n\nenum PaymentStatus {\n PENDING\n SUCCESS\n FAILED\n}\n\nenum CardTier {\n BRONZE\n SILVER\n GOLD\n}\n\nenum EventType {\n GOAL\n ASSIST\n YELLOW_CARD\n RED_CARD\n SECOND_YELLOW\n SUBSTITUTION_IN\n SUBSTITUTION_OUT\n INJURY_NO_SUB\n CLEAN_SHEET\n PENALTY_SAVED\n PENALTY_MISSED\n OWN_GOAL\n EXTRA_TIME_BONUS\n MOTM\n}\n\nmodel Country {\n id String @id @default(cuid())\n name String @unique\n code String @unique\n flagUrl String?\n flagImage String? // نام فایل پرچم مثل Flag_of_Australia.webp\n confederation String? // کنفدراسیون (UEFA, AFC, CAF, ...)\n qualificationMethod String? // شیوه راه‌یابی\n qualificationDate String? // تاریخ راه‌یابی\n participationHistory String? // سابقه شرکت\n bestResult String? // بهترین نتیجه\n description String? @db.Text // توضیحات کامل\n defaultFormation String @default(\"4-3-3\")\n defaultLineupPlayerIds String[] @default([])\n defaultCaptainId String? // شناسه کاپیتان پیش‌فرض\n group Group? @relation(fields: [groupId], references: [id])\n groupId String?\n isEliminated Boolean @default(false)\n players Player[]\n homeMatches Match[] @relation(\"HomeTeam\")\n awayMatches Match[] @relation(\"AwayTeam\")\n}\n\nmodel Group {\n id String @id @default(cuid())\n name String @unique\n countries Country[]\n}\n\nmodel Player {\n id String @id @default(cuid())\n name String\n image String? // نام فایل تصویر در public/uploads/players/\n position Position\n countryId String\n country Country @relation(fields: [countryId], references: [id])\n price Float @default(5.0)\n totalPoints Int @default(0)\n isActive Boolean @default(true)\n isGoldenCardEligible Boolean @default(false)\n cardTier CardTier @default(BRONZE)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n matchStats PlayerMatchStat[]\n teamPlayers TeamPlayer[]\n events MatchEvent[]\n goldenCards GoldenCard[]\n}\n\nmodel Match {\n id String @id @default(cuid())\n homeTeamId String\n awayTeamId String\n homeTeam Country @relation(\"HomeTeam\", fields: [homeTeamId], references: [id])\n awayTeam Country @relation(\"AwayTeam\", fields: [awayTeamId], references: [id])\n homeScore Int?\n awayScore Int?\n stage MatchStage @default(GROUP)\n status MatchStatus @default(SCHEDULED)\n matchDate DateTime\n matchDatePersian String? // تاریخ شمسی\n stadium String? // نام ورزشگاه\n city String? // شهر\n referee String? // داور اصلی\n assistant1 String? // کمک داور 1\n assistant2 String? // کمک داور 2\n fourthOfficial String? // داور چهارم\n attendance Int? // تعداد تماشاگر\n weather String? // وضعیت آب و هوا\n description String? @db.Text // توضیحات بازی\n roundId String?\n round Round? @relation(fields: [roundId], references: [id])\n playerStats PlayerMatchStat[]\n events MatchEvent[]\n lineups MatchLineup[]\n createdAt DateTime @default(now())\n}\n\nmodel Round {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n matches Match[]\n createdAt DateTime @default(now())\n}\n\nmodel Gameweek {\n id String @id @default(cuid())\n number Int @unique\n name String\n isActive Boolean @default(false)\n deadline DateTime\n createdAt DateTime @default(now())\n}\n\nmodel MatchEvent {\n id String @id @default(cuid())\n matchId String\n playerId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n type EventType\n minute Int?\n extraInfo String?\n createdAt DateTime @default(now())\n}\n\nmodel MatchLineup {\n id String @id @default(cuid())\n matchId String\n countryId String\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n formation String\n playerIds String[]\n}\n\nmodel PlayerMatchStat {\n id String @id @default(cuid())\n playerId String\n matchId String\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)\n goals Int @default(0)\n assists Int @default(0)\n yellowCards Int @default(0)\n redCards Int @default(0)\n minutesPlayed Int @default(0)\n cleanSheet Boolean @default(false)\n penaltySaved Int @default(0)\n penaltyMissed Int @default(0)\n ownGoals Int @default(0)\n isMotm Boolean @default(false)\n extraTimeBonus Int @default(0)\n points Int @default(0)\n\n @@unique([playerId, matchId])\n}\n\nmodel ScoringRule {\n id String @id @default(cuid())\n position Position\n eventType EventType\n points Int\n updatedAt DateTime @updatedAt\n updatedBy String?\n\n @@unique([position, eventType])\n}\n\nmodel User {\n id String @id @default(cuid())\n name String?\n email String @unique\n phone String? @unique\n password String\n role Role @default(USER)\n createdAt DateTime @default(now())\n team Team?\n sessions Session[]\n payments Payment[]\n quizSubmissions QuizSubmission[]\n goldenCards GoldenCard[]\n refreshTokens RefreshToken[]\n}\n\nmodel LoginOtp {\n id String @id @default(cuid())\n phone String\n codeHash String\n attempts Int @default(0)\n expiresAt DateTime\n consumedAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([phone, createdAt])\n}\n\nmodel FantasyNews {\n id String @id @default(cuid())\n icon String\n title String\n description String @db.Text\n newsTime DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([newsTime])\n}\n\nenum GoldenCardStatus {\n SEALED\n OPENED\n}\n\nenum SpecialCardState {\n IN_INVENTORY\n IN_TEAM\n SOLD\n}\n\nmodel DailyQuiz {\n id String @id @default(cuid())\n date DateTime @db.Date\n windowStart DateTime\n windowEnd DateTime\n goldWinnersCount Int @default(1)\n silverWinnersCount Int @default(0)\n bronzeWinnersCount Int @default(0)\n goldMinCorrect Int?\n silverMinCorrect Int?\n bronzeMinCorrect Int?\n isProcessed Boolean @default(false)\n createdAt DateTime @default(now())\n questions QuizQuestion[]\n submissions QuizSubmission[]\n awardedCards GoldenCard[]\n\n @@unique([date])\n}\n\nmodel QuizQuestion {\n id String @id @default(cuid())\n quizId String\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n questionText String\n options String[]\n correctAnswer Int // index of correct option (0-based)\n order Int @default(0)\n}\n\nmodel QuizSubmission {\n id String @id @default(cuid())\n userId String\n quizId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz @relation(fields: [quizId], references: [id], onDelete: Cascade)\n answers Int[] // user's selected option indexes\n correctAnswers Int @default(0)\n score Int @default(0) // percentage 0-100\n submittedAt DateTime @default(now())\n\n @@unique([userId, quizId])\n}\n\nmodel GoldenCard {\n id String @id @default(cuid())\n userId String\n quizId String?\n playerId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n quiz DailyQuiz? @relation(fields: [quizId], references: [id], onDelete: SetNull)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n cardTier CardTier @default(GOLD)\n status GoldenCardStatus @default(SEALED)\n state SpecialCardState @default(IN_INVENTORY)\n acquiredDate DateTime @default(now())\n openedAt DateTime?\n teamPlayer TeamPlayer?\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionToken String @unique\n userId String\n expires DateTime\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n\nmodel RefreshToken {\n id String @id @default(cuid())\n tokenHash String @unique\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n familyId String\n expiresAt DateTime\n revokedAt DateTime?\n replacedByTokenId String?\n createdAt DateTime @default(now())\n\n @@index([userId])\n @@index([familyId])\n @@index([expiresAt])\n}\n\nmodel Team {\n id String @id @default(cuid())\n name String\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n budget Float @default(100.0)\n totalPoints Int @default(0)\n formation String @default(\"4-3-3\")\n status TeamStatus @default(INACTIVE)\n createdAt DateTime @default(now())\n players TeamPlayer[]\n}\n\nmodel TeamPlayer {\n teamId String\n playerId String\n goldenCardId String? @unique\n isCaptain Boolean @default(false)\n isViceCaptain Boolean @default(false)\n isBench Boolean @default(false)\n positionIndex Int @default(0)\n team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)\n player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)\n goldenCard GoldenCard? @relation(fields: [goldenCardId], references: [id], onDelete: SetNull)\n\n @@id([teamId, playerId])\n}\n\nmodel Package {\n id String @id @default(cuid())\n name String\n budgetBonus Float\n price Int\n description String?\n isActive Boolean @default(true)\n payments Payment[]\n}\n\nmodel Payment {\n id String @id @default(cuid())\n userId String\n packageId String\n user User @relation(fields: [userId], references: [id])\n package Package @relation(fields: [packageId], references: [id])\n amount Int\n authority String? @unique\n refId String?\n status PaymentStatus @default(PENDING)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", + "inlineSchemaHash": "98e4715edb3236c358ee74dae87fa24e5d460352b7c3893e002809316206b601", "copyEngine": true } config.dirname = '/' -config.runtimeDataModel = JSON.parse("{\"models\":{\"Country\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"flagUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"flagImage\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"confederation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qualificationMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qualificationDate\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"participationHistory\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bestResult\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultFormation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultLineupPlayerIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultCaptainId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"CountryToGroup\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isEliminated\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"players\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"CountryToPlayer\"},{\"name\":\"homeMatches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"HomeTeam\"},{\"name\":\"awayMatches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"AwayTeam\"}],\"dbName\":null},\"Group\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countries\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"CountryToGroup\"}],\"dbName\":null},\"Player\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"enum\",\"type\":\"Position\"},{\"name\":\"countryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"CountryToPlayer\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isGoldenCardEligible\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"cardTier\",\"kind\":\"enum\",\"type\":\"CardTier\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matchStats\",\"kind\":\"object\",\"type\":\"PlayerMatchStat\",\"relationName\":\"PlayerToPlayerMatchStat\"},{\"name\":\"teamPlayers\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"PlayerToTeamPlayer\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"MatchEvent\",\"relationName\":\"MatchEventToPlayer\"},{\"name\":\"goldenCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToPlayer\"}],\"dbName\":null},\"Match\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeTeamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"awayTeamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeTeam\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"HomeTeam\"},{\"name\":\"awayTeam\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"AwayTeam\"},{\"name\":\"homeScore\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"awayScore\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"stage\",\"kind\":\"enum\",\"type\":\"MatchStage\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"MatchStatus\"},{\"name\":\"matchDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matchDatePersian\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stadium\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"referee\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"assistant1\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"assistant2\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fourthOfficial\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attendance\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"weather\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roundId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"round\",\"kind\":\"object\",\"type\":\"Round\",\"relationName\":\"MatchToRound\"},{\"name\":\"playerStats\",\"kind\":\"object\",\"type\":\"PlayerMatchStat\",\"relationName\":\"MatchToPlayerMatchStat\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"MatchEvent\",\"relationName\":\"MatchToMatchEvent\"},{\"name\":\"lineups\",\"kind\":\"object\",\"type\":\"MatchLineup\",\"relationName\":\"MatchToMatchLineup\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Round\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"number\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deadline\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToRound\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Gameweek\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"number\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deadline\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MatchEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToMatchEvent\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"MatchEventToPlayer\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"minute\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"extraInfo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MatchLineup\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToMatchLineup\"},{\"name\":\"formation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerIds\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"PlayerMatchStat\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"PlayerToPlayerMatchStat\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToPlayerMatchStat\"},{\"name\":\"goals\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"assists\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"yellowCards\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"redCards\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"minutesPlayed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cleanSheet\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"penaltySaved\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"penaltyMissed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"ownGoals\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isMotm\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"extraTimeBonus\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"points\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null},\"ScoringRule\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"enum\",\"type\":\"Position\"},{\"name\":\"eventType\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"points\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"team\",\"kind\":\"object\",\"type\":\"Team\",\"relationName\":\"TeamToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToUser\"},{\"name\":\"quizSubmissions\",\"kind\":\"object\",\"type\":\"QuizSubmission\",\"relationName\":\"QuizSubmissionToUser\"},{\"name\":\"goldenCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToUser\"}],\"dbName\":null},\"LoginOtp\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"codeHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attempts\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"consumedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"FantasyNews\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"icon\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"newsTime\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"DailyQuiz\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"windowStart\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"windowEnd\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"goldWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"silverWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"bronzeWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"goldMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"silverMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"bronzeMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isProcessed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"questions\",\"kind\":\"object\",\"type\":\"QuizQuestion\",\"relationName\":\"DailyQuizToQuizQuestion\"},{\"name\":\"submissions\",\"kind\":\"object\",\"type\":\"QuizSubmission\",\"relationName\":\"DailyQuizToQuizSubmission\"},{\"name\":\"awardedCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"DailyQuizToGoldenCard\"}],\"dbName\":null},\"QuizQuestion\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToQuizQuestion\"},{\"name\":\"questionText\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"options\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"correctAnswer\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null},\"QuizSubmission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"QuizSubmissionToUser\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToQuizSubmission\"},{\"name\":\"answers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"correctAnswers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"score\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"submittedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"GoldenCard\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"GoldenCardToUser\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToGoldenCard\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"GoldenCardToPlayer\"},{\"name\":\"cardTier\",\"kind\":\"enum\",\"type\":\"CardTier\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"GoldenCardStatus\"},{\"name\":\"state\",\"kind\":\"enum\",\"type\":\"SpecialCardState\"},{\"name\":\"acquiredDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"openedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"teamPlayer\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"GoldenCardToTeamPlayer\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":null},\"Team\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TeamToUser\"},{\"name\":\"budget\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"formation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"TeamStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"players\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"TeamToTeamPlayer\"}],\"dbName\":null},\"TeamPlayer\":{\"fields\":[{\"name\":\"teamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"goldenCardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isCaptain\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isViceCaptain\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isBench\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"positionIndex\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"team\",\"kind\":\"object\",\"type\":\"Team\",\"relationName\":\"TeamToTeamPlayer\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"PlayerToTeamPlayer\"},{\"name\":\"goldenCard\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToTeamPlayer\"}],\"dbName\":null},\"Package\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"budgetBonus\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PackageToPayment\"}],\"dbName\":null},\"Payment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"packageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PaymentToUser\"},{\"name\":\"package\",\"kind\":\"object\",\"type\":\"Package\",\"relationName\":\"PackageToPayment\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"authority\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"PaymentStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Country\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"flagUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"flagImage\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"confederation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qualificationMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qualificationDate\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"participationHistory\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bestResult\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultFormation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultLineupPlayerIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultCaptainId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"CountryToGroup\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isEliminated\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"players\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"CountryToPlayer\"},{\"name\":\"homeMatches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"HomeTeam\"},{\"name\":\"awayMatches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"AwayTeam\"}],\"dbName\":null},\"Group\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countries\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"CountryToGroup\"}],\"dbName\":null},\"Player\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"enum\",\"type\":\"Position\"},{\"name\":\"countryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"CountryToPlayer\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isGoldenCardEligible\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"cardTier\",\"kind\":\"enum\",\"type\":\"CardTier\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matchStats\",\"kind\":\"object\",\"type\":\"PlayerMatchStat\",\"relationName\":\"PlayerToPlayerMatchStat\"},{\"name\":\"teamPlayers\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"PlayerToTeamPlayer\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"MatchEvent\",\"relationName\":\"MatchEventToPlayer\"},{\"name\":\"goldenCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToPlayer\"}],\"dbName\":null},\"Match\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeTeamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"awayTeamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeTeam\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"HomeTeam\"},{\"name\":\"awayTeam\",\"kind\":\"object\",\"type\":\"Country\",\"relationName\":\"AwayTeam\"},{\"name\":\"homeScore\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"awayScore\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"stage\",\"kind\":\"enum\",\"type\":\"MatchStage\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"MatchStatus\"},{\"name\":\"matchDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matchDatePersian\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stadium\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"referee\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"assistant1\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"assistant2\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fourthOfficial\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attendance\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"weather\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roundId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"round\",\"kind\":\"object\",\"type\":\"Round\",\"relationName\":\"MatchToRound\"},{\"name\":\"playerStats\",\"kind\":\"object\",\"type\":\"PlayerMatchStat\",\"relationName\":\"MatchToPlayerMatchStat\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"MatchEvent\",\"relationName\":\"MatchToMatchEvent\"},{\"name\":\"lineups\",\"kind\":\"object\",\"type\":\"MatchLineup\",\"relationName\":\"MatchToMatchLineup\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Round\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"number\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deadline\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"matches\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToRound\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Gameweek\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"number\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deadline\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MatchEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToMatchEvent\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"MatchEventToPlayer\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"minute\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"extraInfo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MatchLineup\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToMatchLineup\"},{\"name\":\"formation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerIds\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"PlayerMatchStat\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"matchId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"PlayerToPlayerMatchStat\"},{\"name\":\"match\",\"kind\":\"object\",\"type\":\"Match\",\"relationName\":\"MatchToPlayerMatchStat\"},{\"name\":\"goals\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"assists\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"yellowCards\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"redCards\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"minutesPlayed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cleanSheet\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"penaltySaved\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"penaltyMissed\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"ownGoals\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isMotm\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"extraTimeBonus\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"points\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null},\"ScoringRule\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"enum\",\"type\":\"Position\"},{\"name\":\"eventType\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"points\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"team\",\"kind\":\"object\",\"type\":\"Team\",\"relationName\":\"TeamToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToUser\"},{\"name\":\"quizSubmissions\",\"kind\":\"object\",\"type\":\"QuizSubmission\",\"relationName\":\"QuizSubmissionToUser\"},{\"name\":\"goldenCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToUser\"},{\"name\":\"refreshTokens\",\"kind\":\"object\",\"type\":\"RefreshToken\",\"relationName\":\"RefreshTokenToUser\"}],\"dbName\":null},\"LoginOtp\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"codeHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attempts\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"consumedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"FantasyNews\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"icon\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"newsTime\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"DailyQuiz\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"windowStart\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"windowEnd\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"goldWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"silverWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"bronzeWinnersCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"goldMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"silverMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"bronzeMinCorrect\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isProcessed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"questions\",\"kind\":\"object\",\"type\":\"QuizQuestion\",\"relationName\":\"DailyQuizToQuizQuestion\"},{\"name\":\"submissions\",\"kind\":\"object\",\"type\":\"QuizSubmission\",\"relationName\":\"DailyQuizToQuizSubmission\"},{\"name\":\"awardedCards\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"DailyQuizToGoldenCard\"}],\"dbName\":null},\"QuizQuestion\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToQuizQuestion\"},{\"name\":\"questionText\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"options\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"correctAnswer\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":null},\"QuizSubmission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"QuizSubmissionToUser\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToQuizSubmission\"},{\"name\":\"answers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"correctAnswers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"score\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"submittedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"GoldenCard\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quizId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"GoldenCardToUser\"},{\"name\":\"quiz\",\"kind\":\"object\",\"type\":\"DailyQuiz\",\"relationName\":\"DailyQuizToGoldenCard\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"GoldenCardToPlayer\"},{\"name\":\"cardTier\",\"kind\":\"enum\",\"type\":\"CardTier\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"GoldenCardStatus\"},{\"name\":\"state\",\"kind\":\"enum\",\"type\":\"SpecialCardState\"},{\"name\":\"acquiredDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"openedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"teamPlayer\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"GoldenCardToTeamPlayer\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":null},\"RefreshToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"RefreshTokenToUser\"},{\"name\":\"familyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"revokedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"replacedByTokenId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Team\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TeamToUser\"},{\"name\":\"budget\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalPoints\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"formation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"TeamStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"players\",\"kind\":\"object\",\"type\":\"TeamPlayer\",\"relationName\":\"TeamToTeamPlayer\"}],\"dbName\":null},\"TeamPlayer\":{\"fields\":[{\"name\":\"teamId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"playerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"goldenCardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isCaptain\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isViceCaptain\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isBench\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"positionIndex\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"team\",\"kind\":\"object\",\"type\":\"Team\",\"relationName\":\"TeamToTeamPlayer\"},{\"name\":\"player\",\"kind\":\"object\",\"type\":\"Player\",\"relationName\":\"PlayerToTeamPlayer\"},{\"name\":\"goldenCard\",\"kind\":\"object\",\"type\":\"GoldenCard\",\"relationName\":\"GoldenCardToTeamPlayer\"}],\"dbName\":null},\"Package\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"budgetBonus\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PackageToPayment\"}],\"dbName\":null},\"Payment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"packageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PaymentToUser\"},{\"name\":\"package\",\"kind\":\"object\",\"type\":\"Package\",\"relationName\":\"PackageToPayment\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"authority\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"PaymentStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.engineWasm = undefined config.compilerWasm = { diff --git a/lib/mobileTokens.ts b/lib/mobileTokens.ts new file mode 100644 index 0000000..669274d --- /dev/null +++ b/lib/mobileTokens.ts @@ -0,0 +1,64 @@ +import crypto from "crypto"; +import { db } from "@/lib/db"; + +export const ACCESS_TOKEN_EXPIRES_IN = 15 * 60; +export const REFRESH_TOKEN_EXPIRES_IN = 30 * 24 * 60 * 60; + +function addSeconds(seconds: number) { + return new Date(Date.now() + seconds * 1000); +} + +export function hashToken(token: string) { + return crypto.createHash("sha256").update(token).digest("hex"); +} + +export function generateToken() { + return crypto.randomBytes(48).toString("base64url"); +} + +export async function createMobileTokenPair(userId: string, refreshFamilyId?: string) { + const accessToken = generateToken(); + const refreshToken = generateToken(); + const accessTokenExpiresAt = addSeconds(ACCESS_TOKEN_EXPIRES_IN); + const refreshTokenExpiresAt = addSeconds(REFRESH_TOKEN_EXPIRES_IN); + + const session = await db.session.create({ + data: { + sessionToken: accessToken, + userId, + expires: accessTokenExpiresAt, + }, + }); + + const refreshSession = await db.refreshToken.create({ + data: { + tokenHash: hashToken(refreshToken), + userId, + familyId: refreshFamilyId ?? crypto.randomUUID(), + expiresAt: refreshTokenExpiresAt, + }, + }); + + return { + accessToken, + accessTokenExpiresAt, + refreshToken, + refreshTokenExpiresAt, + refreshTokenId: refreshSession.id, + refreshFamilyId: refreshSession.familyId, + sessionId: session.id, + }; +} + +export async function revokeRefreshTokenFamily(userId: string, familyId: string) { + await db.refreshToken.updateMany({ + where: { + userId, + familyId, + revokedAt: null, + }, + data: { + revokedAt: new Date(), + }, + }); +} diff --git a/lib/openapi.ts b/lib/openapi.ts index f4c4e80..a33c04c 100644 --- a/lib/openapi.ts +++ b/lib/openapi.ts @@ -1,5 +1,5 @@ -const authSecurity = [{ SessionToken: [] }, { SecureSessionToken: [] }]; -const adminSecurity = [{ SessionToken: [] }, { SecureSessionToken: [] }]; +const authSecurity = [{ SessionToken: [] }, { SecureSessionToken: [] }, { BearerAuth: [] }]; +const adminSecurity = [{ SessionToken: [] }, { SecureSessionToken: [] }, { BearerAuth: [] }]; const jsonContent = (schema: unknown, example?: unknown) => ({ "application/json": { @@ -71,6 +71,12 @@ export const openApiSpec = { name: "__Secure-next-auth.session-token", description: "توکن سشن NextAuth در محیط HTTPS", }, + BearerAuth: { + type: "http", + scheme: "bearer", + bearerFormat: "opaque", + description: "Mobile app access token returned by /api/auth/mobile/verify or /api/auth/mobile/refresh", + }, }, schemas: { ErrorResponse: { @@ -458,9 +464,14 @@ export const openApiSpec = { MobileOtpVerifyResponse: { type: "object", properties: { + accessToken: { type: "string" }, token: { type: "string" }, tokenType: { type: "string", example: "Bearer" }, + expiresIn: { type: "integer", example: 900 }, expiresAt: { type: "string", format: "date-time" }, + refreshToken: { type: "string" }, + refreshExpiresIn: { type: "integer", example: 2592000 }, + refreshExpiresAt: { type: "string", format: "date-time" }, user: { type: "object", properties: { @@ -472,6 +483,19 @@ export const openApiSpec = { }, }, }, + MobileRefreshRequest: { + type: "object", + properties: { + refreshToken: { type: "string" }, + }, + required: ["refreshToken"], + }, + MobileLogoutRequest: { + type: "object", + properties: { + refreshToken: { type: "string" }, + }, + }, CredentialsLoginRequest: { type: "object", properties: { @@ -648,6 +672,41 @@ export const openApiSpec = { ]), }, }, + "/api/auth/mobile/refresh": { + post: { + tags: ["Auth"], + summary: "Rotate refresh token and issue a new mobile access token", + requestBody: requestBody( + { $ref: "#/components/schemas/MobileRefreshRequest" }, + { refreshToken: "refresh_token_value" } + ), + responses: Object.fromEntries([ + ["200", jsonResponse("Token refreshed", { $ref: "#/components/schemas/MobileOtpVerifyResponse" })], + errorResponse("400", "Missing refresh token", "refreshToken is required"), + errorResponse("401", "Invalid, expired, or revoked refresh token", "Invalid refresh token"), + ]), + }, + }, + "/api/auth/mobile/logout": { + post: { + tags: ["Auth"], + summary: "Revoke mobile refresh token family and delete current access token", + security: authSecurity, + requestBody: requestBody( + { $ref: "#/components/schemas/MobileLogoutRequest" }, + { refreshToken: "refresh_token_value" }, + false + ), + responses: { + "200": jsonResponse("Logged out", { + type: "object", + properties: { + ok: { type: "boolean", example: true }, + }, + }, { ok: true }), + }, + }, + }, "/api/auth/callback/credentials": { post: { tags: ["Auth"], diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 9c92ebe..13b9e7f 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -237,6 +237,7 @@ model User { payments Payment[] quizSubmissions QuizSubmission[] goldenCards GoldenCard[] + refreshTokens RefreshToken[] } model LoginOtp { @@ -342,6 +343,22 @@ model Session { user User @relation(fields: [userId], references: [id], onDelete: Cascade) } +model RefreshToken { + id String @id @default(cuid()) + tokenHash String @unique + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + familyId String + expiresAt DateTime + revokedAt DateTime? + replacedByTokenId String? + createdAt DateTime @default(now()) + + @@index([userId]) + @@index([familyId]) + @@index([expiresAt]) +} + model Team { id String @id @default(cuid()) name String