diff --git a/README.md b/README.md index 6f00a8d..5384f18 100644 --- a/README.md +++ b/README.md @@ -37,4 +37,3 @@ pnpm start - React 18 - TypeScript - Tailwind CSS - diff --git a/app/api/leaderboard/route.ts b/app/api/leaderboard/route.ts index 0cfd212..538e929 100644 --- a/app/api/leaderboard/route.ts +++ b/app/api/leaderboard/route.ts @@ -15,6 +15,7 @@ export async function GET() { level: true, avatar: true, bio: true, + characterClass: true, }, }); @@ -27,6 +28,7 @@ export async function GET() { level: number; avatar: string | null; bio: string | null; + characterClass: string | null; }, index: number ) => ({ @@ -36,6 +38,7 @@ export async function GET() { level: user.level, avatar: user.avatar, bio: user.bio, + characterClass: user.characterClass, }) ); diff --git a/app/api/profile/route.ts b/app/api/profile/route.ts index a3953d9..e740f5e 100644 --- a/app/api/profile/route.ts +++ b/app/api/profile/route.ts @@ -1,6 +1,7 @@ import { NextResponse } from "next/server"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; +import { CharacterClass } from "@/prisma/generated/prisma/enums"; export async function GET() { try { @@ -18,6 +19,7 @@ export async function GET() { username: true, avatar: true, bio: true, + characterClass: true, hp: true, maxHp: true, xp: true, @@ -51,7 +53,7 @@ export async function PUT(request: Request) { } const body = await request.json(); - const { username, avatar, bio } = body; + const { username, avatar, bio, characterClass } = body; // Validation if (username !== undefined) { @@ -101,8 +103,35 @@ export async function PUT(request: Request) { } } + // Validation characterClass + const validClasses = [ + "WARRIOR", + "MAGE", + "ROGUE", + "RANGER", + "PALADIN", + "ENGINEER", + "MERCHANT", + "SCHOLAR", + "BERSERKER", + "NECROMANCER", + ]; + if (characterClass !== undefined && characterClass !== null) { + if (!validClasses.includes(characterClass)) { + return NextResponse.json( + { error: "Classe de personnage invalide" }, + { status: 400 } + ); + } + } + // Mettre à jour l'utilisateur - const updateData: { username?: string; avatar?: string | null; bio?: string | null } = {}; + const updateData: { + username?: string; + avatar?: string | null; + bio?: string | null; + characterClass?: CharacterClass | null; + } = {}; if (username !== undefined) { updateData.username = username.trim(); } @@ -112,6 +141,9 @@ export async function PUT(request: Request) { if (bio !== undefined) { updateData.bio = bio.trim() || null; } + if (characterClass !== undefined) { + updateData.characterClass = (characterClass as CharacterClass) || null; + } const updatedUser = await prisma.user.update({ where: { id: session.user.id }, @@ -122,6 +154,7 @@ export async function PUT(request: Request) { username: true, avatar: true, bio: true, + characterClass: true, hp: true, maxHp: true, xp: true, diff --git a/app/leaderboard/page.tsx b/app/leaderboard/page.tsx index c7e5738..fbe42d3 100644 --- a/app/leaderboard/page.tsx +++ b/app/leaderboard/page.tsx @@ -10,6 +10,7 @@ interface LeaderboardEntry { level: number; avatar: string | null; bio: string | null; + characterClass: string | null; } export default async function LeaderboardPage() { @@ -25,6 +26,7 @@ export default async function LeaderboardPage() { level: true, avatar: true, bio: true, + characterClass: true, }, }); @@ -35,6 +37,7 @@ export default async function LeaderboardPage() { level: user.level, avatar: user.avatar, bio: user.bio, + characterClass: user.characterClass, })); const backgroundImage = await getBackgroundImage( diff --git a/app/profile/page.tsx b/app/profile/page.tsx index d4e8568..e9b3bd5 100644 --- a/app/profile/page.tsx +++ b/app/profile/page.tsx @@ -20,6 +20,7 @@ export default async function ProfilePage() { username: true, avatar: true, bio: true, + characterClass: true, hp: true, maxHp: true, xp: true, @@ -34,13 +35,24 @@ export default async function ProfilePage() { redirect("/login"); } - const backgroundImage = await getBackgroundImage("home", "/got-background.jpg"); + const backgroundImage = await getBackgroundImage( + "home", + "/got-background.jpg" + ); + + // Convert Date to string for the component + const userProfile = { + ...user, + createdAt: user.createdAt.toISOString(), + }; return (
- +
); } - diff --git a/components/Leaderboard.tsx b/components/Leaderboard.tsx index f2d0ac7..8680090 100644 --- a/components/Leaderboard.tsx +++ b/components/Leaderboard.tsx @@ -9,6 +9,7 @@ interface LeaderboardEntry { level: number; avatar?: string | null; bio?: string | null; + characterClass?: string | null; } // Format number with consistent locale to avoid hydration mismatch @@ -82,18 +83,80 @@ export default function Leaderboard() { {entry.rank} -
+
{entry.username} - {entry.bio && ( + {entry.characterClass && ( + + [{entry.characterClass === "WARRIOR" && "⚔️ Guerrier"} + {entry.characterClass === "MAGE" && "🔮 Mage"} + {entry.characterClass === "ROGUE" && "🗡️ Voleur"} + {entry.characterClass === "RANGER" && "🏹 Rôdeur"} + {entry.characterClass === "PALADIN" && "🛡️ Paladin"} + {entry.characterClass === "ENGINEER" && "⚙️ Ingénieur"} + {entry.characterClass === "MERCHANT" && "💰 Marchand"} + {entry.characterClass === "SCHOLAR" && "📚 Érudit"} + {entry.characterClass === "BERSERKER" && "🔥 Berserker"} + {entry.characterClass === "NECROMANCER" && + "💀 Nécromancien"} + ] + + )} + {(entry.bio || entry.characterClass) && (
-
- Bio -
-

- {entry.bio} -

+ {entry.characterClass && ( +
+
+ Classe +
+
+ + {entry.characterClass === "WARRIOR" && "⚔️"} + {entry.characterClass === "MAGE" && "🔮"} + {entry.characterClass === "ROGUE" && "🗡️"} + {entry.characterClass === "RANGER" && "🏹"} + {entry.characterClass === "PALADIN" && "🛡️"} + {entry.characterClass === "ENGINEER" && "⚙️"} + {entry.characterClass === "MERCHANT" && "💰"} + {entry.characterClass === "SCHOLAR" && "📚"} + {entry.characterClass === "BERSERKER" && "🔥"} + {entry.characterClass === "NECROMANCER" && "💀"} + + + {entry.characterClass === "WARRIOR" && "Guerrier"} + {entry.characterClass === "MAGE" && "Mage"} + {entry.characterClass === "ROGUE" && "Voleur"} + {entry.characterClass === "RANGER" && "Rôdeur"} + {entry.characterClass === "PALADIN" && "Paladin"} + {entry.characterClass === "ENGINEER" && + "Ingénieur"} + {entry.characterClass === "MERCHANT" && + "Marchand"} + {entry.characterClass === "SCHOLAR" && "Érudit"} + {entry.characterClass === "BERSERKER" && + "Berserker"} + {entry.characterClass === "NECROMANCER" && + "Nécromancien"} + +
+
+ )} + {entry.bio && ( + <> + {entry.characterClass && ( +
+ )} +
+
+ Bio +
+

+ {entry.bio} +

+
+ + )}
)}
diff --git a/components/LeaderboardSection.tsx b/components/LeaderboardSection.tsx index fe56505..52bc934 100644 --- a/components/LeaderboardSection.tsx +++ b/components/LeaderboardSection.tsx @@ -7,6 +7,7 @@ interface LeaderboardEntry { level: number; avatar?: string | null; bio?: string | null; + characterClass?: string | null; } interface LeaderboardSectionProps { @@ -119,17 +120,77 @@ export default function LeaderboardSection({ > {entry.username} + {entry.characterClass && ( + + [{entry.characterClass === "WARRIOR" && "⚔️"} + {entry.characterClass === "MAGE" && "🔮"} + {entry.characterClass === "ROGUE" && "🗡️"} + {entry.characterClass === "RANGER" && "🏹"} + {entry.characterClass === "PALADIN" && "🛡️"} + {entry.characterClass === "ENGINEER" && "⚙️"} + {entry.characterClass === "MERCHANT" && "💰"} + {entry.characterClass === "SCHOLAR" && "📚"} + {entry.characterClass === "BERSERKER" && "🔥"} + {entry.characterClass === "NECROMANCER" && "💀"}] + + )} {entry.rank <= 3 && ( )} - {entry.bio && ( + {(entry.bio || entry.characterClass) && (
-
- Bio -
-

- {entry.bio} -

+ {entry.characterClass && ( +
+
+ Classe +
+
+ + {entry.characterClass === "WARRIOR" && "⚔️"} + {entry.characterClass === "MAGE" && "🔮"} + {entry.characterClass === "ROGUE" && "🗡️"} + {entry.characterClass === "RANGER" && "🏹"} + {entry.characterClass === "PALADIN" && "🛡️"} + {entry.characterClass === "ENGINEER" && "⚙️"} + {entry.characterClass === "MERCHANT" && "💰"} + {entry.characterClass === "SCHOLAR" && "📚"} + {entry.characterClass === "BERSERKER" && "🔥"} + {entry.characterClass === "NECROMANCER" && "💀"} + + + {entry.characterClass === "WARRIOR" && "Guerrier"} + {entry.characterClass === "MAGE" && "Mage"} + {entry.characterClass === "ROGUE" && "Voleur"} + {entry.characterClass === "RANGER" && "Rôdeur"} + {entry.characterClass === "PALADIN" && "Paladin"} + {entry.characterClass === "ENGINEER" && + "Ingénieur"} + {entry.characterClass === "MERCHANT" && + "Marchand"} + {entry.characterClass === "SCHOLAR" && "Érudit"} + {entry.characterClass === "BERSERKER" && + "Berserker"} + {entry.characterClass === "NECROMANCER" && + "Nécromancien"} + +
+
+ )} + {entry.bio && ( + <> + {entry.characterClass && ( +
+ )} +
+
+ Bio +
+

+ {entry.bio} +

+
+ + )}
)}
diff --git a/components/ProfileForm.tsx b/components/ProfileForm.tsx index c4cf255..935664b 100644 --- a/components/ProfileForm.tsx +++ b/components/ProfileForm.tsx @@ -3,12 +3,26 @@ import { useState, useRef } from "react"; import { useRouter } from "next/navigation"; +type CharacterClass = + | "WARRIOR" + | "MAGE" + | "ROGUE" + | "RANGER" + | "PALADIN" + | "ENGINEER" + | "MERCHANT" + | "SCHOLAR" + | "BERSERKER" + | "NECROMANCER" + | null; + interface UserProfile { id: string; email: string; username: string; avatar: string | null; bio: string | null; + characterClass: CharacterClass; hp: number; maxHp: number; xp: number; @@ -40,6 +54,9 @@ export default function ProfileForm({ const [username, setUsername] = useState(initialProfile.username); const [avatar, setAvatar] = useState(initialProfile.avatar); const [bio, setBio] = useState(initialProfile.bio || null); + const [characterClass, setCharacterClass] = useState( + initialProfile.characterClass || null + ); const fileInputRef = useRef(null); const [uploadingAvatar, setUploadingAvatar] = useState(false); @@ -102,6 +119,7 @@ export default function ProfileForm({ username, avatar, bio, + characterClass, }), }); @@ -109,6 +127,7 @@ export default function ProfileForm({ const data = await response.json(); setProfile(data); setBio(data.bio || null); + setCharacterClass(data.characterClass || null); setSuccess("Profil mis à jour avec succès"); setTimeout(() => setSuccess(null), 3000); } else { @@ -338,6 +357,111 @@ export default function ProfileForm({

+ {/* Character Class Selection */} +
+ +
+ {[ + { + value: "WARRIOR", + name: "Guerrier", + icon: "⚔️", + desc: "Maître du combat au corps à corps", + }, + { + value: "MAGE", + name: "Mage", + icon: "🔮", + desc: "Manipulateur des arcanes", + }, + { + value: "ROGUE", + name: "Voleur", + icon: "🗡️", + desc: "Furtif et mortel", + }, + { + value: "RANGER", + name: "Rôdeur", + icon: "🏹", + desc: "Chasseur des terres sauvages", + }, + { + value: "PALADIN", + name: "Paladin", + icon: "🛡️", + desc: "Protecteur sacré", + }, + { + value: "ENGINEER", + name: "Ingénieur", + icon: "⚙️", + desc: "Créateur d'artefacts", + }, + { + value: "MERCHANT", + name: "Marchand", + icon: "💰", + desc: "Maître du commerce", + }, + { + value: "SCHOLAR", + name: "Érudit", + icon: "📚", + desc: "Gardien du savoir", + }, + { + value: "BERSERKER", + name: "Berserker", + icon: "🔥", + desc: "Rage destructrice", + }, + { + value: "NECROMANCER", + name: "Nécromancien", + icon: "💀", + desc: "Maître des morts", + }, + ].map((cls) => ( + + ))} +
+ {characterClass && ( +

+ ✓ Classe sélectionnée +

+ )} +
+ {/* Stats Display */}

diff --git a/lib/preferences.ts b/lib/preferences.ts index 8b7cc46..2695332 100644 --- a/lib/preferences.ts +++ b/lib/preferences.ts @@ -16,7 +16,7 @@ export async function getBackgroundImage( const imageKey = `${page}Background` as keyof typeof sitePreferences; const customImage = sitePreferences[imageKey]; - return customImage || defaultImage; + return (customImage as string | null) || defaultImage; } catch (error) { console.error("Error fetching background image:", error); return defaultImage; diff --git a/prisma/generated/prisma/commonInputTypes.ts b/prisma/generated/prisma/commonInputTypes.ts index c654f3c..9c84aaa 100644 --- a/prisma/generated/prisma/commonInputTypes.ts +++ b/prisma/generated/prisma/commonInputTypes.ts @@ -60,6 +60,13 @@ export type StringNullableFilter<$PrismaModel = never> = { not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null } +export type EnumCharacterClassNullableFilter<$PrismaModel = never> = { + equals?: $Enums.CharacterClass | Prisma.EnumCharacterClassFieldRefInput<$PrismaModel> | null + in?: $Enums.CharacterClass[] | null + notIn?: $Enums.CharacterClass[] | null + not?: Prisma.NestedEnumCharacterClassNullableFilter<$PrismaModel> | $Enums.CharacterClass | null +} + export type DateTimeFilter<$PrismaModel = never> = { equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> in?: Date[] | string[] @@ -136,6 +143,16 @@ export type StringNullableWithAggregatesFilter<$PrismaModel = never> = { _max?: Prisma.NestedStringNullableFilter<$PrismaModel> } +export type EnumCharacterClassNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.CharacterClass | Prisma.EnumCharacterClassFieldRefInput<$PrismaModel> | null + in?: $Enums.CharacterClass[] | null + notIn?: $Enums.CharacterClass[] | null + not?: Prisma.NestedEnumCharacterClassNullableWithAggregatesFilter<$PrismaModel> | $Enums.CharacterClass | null + _count?: Prisma.NestedIntNullableFilter<$PrismaModel> + _min?: Prisma.NestedEnumCharacterClassNullableFilter<$PrismaModel> + _max?: Prisma.NestedEnumCharacterClassNullableFilter<$PrismaModel> +} + export type DateTimeWithAggregatesFilter<$PrismaModel = never> = { equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> in?: Date[] | string[] @@ -230,6 +247,13 @@ export type NestedStringNullableFilter<$PrismaModel = never> = { not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null } +export type NestedEnumCharacterClassNullableFilter<$PrismaModel = never> = { + equals?: $Enums.CharacterClass | Prisma.EnumCharacterClassFieldRefInput<$PrismaModel> | null + in?: $Enums.CharacterClass[] | null + notIn?: $Enums.CharacterClass[] | null + not?: Prisma.NestedEnumCharacterClassNullableFilter<$PrismaModel> | $Enums.CharacterClass | null +} + export type NestedDateTimeFilter<$PrismaModel = never> = { equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> in?: Date[] | string[] @@ -323,6 +347,16 @@ export type NestedIntNullableFilter<$PrismaModel = never> = { not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null } +export type NestedEnumCharacterClassNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.CharacterClass | Prisma.EnumCharacterClassFieldRefInput<$PrismaModel> | null + in?: $Enums.CharacterClass[] | null + notIn?: $Enums.CharacterClass[] | null + not?: Prisma.NestedEnumCharacterClassNullableWithAggregatesFilter<$PrismaModel> | $Enums.CharacterClass | null + _count?: Prisma.NestedIntNullableFilter<$PrismaModel> + _min?: Prisma.NestedEnumCharacterClassNullableFilter<$PrismaModel> + _max?: Prisma.NestedEnumCharacterClassNullableFilter<$PrismaModel> +} + export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = { equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> in?: Date[] | string[] diff --git a/prisma/generated/prisma/enums.ts b/prisma/generated/prisma/enums.ts index 24a3886..54123e4 100644 --- a/prisma/generated/prisma/enums.ts +++ b/prisma/generated/prisma/enums.ts @@ -34,3 +34,19 @@ export const EventStatus = { } as const export type EventStatus = (typeof EventStatus)[keyof typeof EventStatus] + + +export const CharacterClass = { + WARRIOR: 'WARRIOR', + MAGE: 'MAGE', + ROGUE: 'ROGUE', + RANGER: 'RANGER', + PALADIN: 'PALADIN', + ENGINEER: 'ENGINEER', + MERCHANT: 'MERCHANT', + SCHOLAR: 'SCHOLAR', + BERSERKER: 'BERSERKER', + NECROMANCER: 'NECROMANCER' +} as const + +export type CharacterClass = (typeof CharacterClass)[keyof typeof CharacterClass] diff --git a/prisma/generated/prisma/internal/class.ts b/prisma/generated/prisma/internal/class.ts index baac8f6..4f24b15 100644 --- a/prisma/generated/prisma/internal/class.ts +++ b/prisma/generated/prisma/internal/class.ts @@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = { "clientVersion": "7.1.0", "engineVersion": "ab635e6b9d606fa5c8fb8b1a7f909c3c3c1c98ba", "activeProvider": "sqlite", - "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum EventType {\n SUMMIT\n LAUNCH\n FESTIVAL\n COMPETITION\n}\n\nenum EventStatus {\n UPCOMING\n LIVE\n PAST\n}\n\nmodel User {\n id String @id @default(cuid())\n email String @unique\n password String\n username String @unique\n role Role @default(USER)\n score Int @default(0)\n level Int @default(1)\n hp Int @default(1000)\n maxHp Int @default(1000)\n xp Int @default(0)\n maxXp Int @default(5000)\n avatar String?\n bio String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n preferences UserPreferences?\n eventRegistrations EventRegistration[]\n\n @@index([score])\n @@index([email])\n}\n\nmodel UserPreferences {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n // Background images for each page\n homeBackground String?\n eventsBackground String?\n leaderboardBackground String?\n\n // Other UI preferences can be added here\n theme String? @default(\"default\")\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Event {\n id String @id @default(cuid())\n date String\n name String\n description String\n type EventType\n status EventStatus\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n registrations EventRegistration[]\n\n @@index([status])\n @@index([date])\n}\n\nmodel EventRegistration {\n id String @id @default(cuid())\n userId String\n eventId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@unique([userId, eventId])\n @@index([userId])\n @@index([eventId])\n}\n\nmodel SitePreferences {\n id String @id @default(\"global\")\n homeBackground String?\n eventsBackground String?\n leaderboardBackground String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", + "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nenum Role {\n USER\n ADMIN\n}\n\nenum EventType {\n SUMMIT\n LAUNCH\n FESTIVAL\n COMPETITION\n}\n\nenum EventStatus {\n UPCOMING\n LIVE\n PAST\n}\n\nenum CharacterClass {\n WARRIOR\n MAGE\n ROGUE\n RANGER\n PALADIN\n ENGINEER\n MERCHANT\n SCHOLAR\n BERSERKER\n NECROMANCER\n}\n\nmodel User {\n id String @id @default(cuid())\n email String @unique\n password String\n username String @unique\n role Role @default(USER)\n score Int @default(0)\n level Int @default(1)\n hp Int @default(1000)\n maxHp Int @default(1000)\n xp Int @default(0)\n maxXp Int @default(5000)\n avatar String?\n bio String?\n characterClass CharacterClass?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n preferences UserPreferences?\n eventRegistrations EventRegistration[]\n\n @@index([score])\n @@index([email])\n}\n\nmodel UserPreferences {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n // Background images for each page\n homeBackground String?\n eventsBackground String?\n leaderboardBackground String?\n\n // Other UI preferences can be added here\n theme String? @default(\"default\")\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Event {\n id String @id @default(cuid())\n date String\n name String\n description String\n type EventType\n status EventStatus\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n registrations EventRegistration[]\n\n @@index([status])\n @@index([date])\n}\n\nmodel EventRegistration {\n id String @id @default(cuid())\n userId String\n eventId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@unique([userId, eventId])\n @@index([userId])\n @@index([eventId])\n}\n\nmodel SitePreferences {\n id String @id @default(\"global\")\n homeBackground String?\n eventsBackground String?\n leaderboardBackground String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", "runtimeDataModel": { "models": {}, "enums": {}, @@ -28,7 +28,7 @@ const config: runtime.GetPrismaClientConfig = { } } -config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"score\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"level\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"hp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxHp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"xp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxXp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bio\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"preferences\",\"kind\":\"object\",\"type\":\"UserPreferences\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"eventRegistrations\",\"kind\":\"object\",\"type\":\"EventRegistration\",\"relationName\":\"EventRegistrationToUser\"}],\"dbName\":null},\"UserPreferences\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"homeBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventsBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"leaderboardBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"theme\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Event\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"EventStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"registrations\",\"kind\":\"object\",\"type\":\"EventRegistration\",\"relationName\":\"EventToEventRegistration\"}],\"dbName\":null},\"EventRegistration\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"EventRegistrationToUser\"},{\"name\":\"event\",\"kind\":\"object\",\"type\":\"Event\",\"relationName\":\"EventToEventRegistration\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"SitePreferences\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventsBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"leaderboardBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"score\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"level\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"hp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxHp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"xp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"maxXp\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bio\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"characterClass\",\"kind\":\"enum\",\"type\":\"CharacterClass\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"preferences\",\"kind\":\"object\",\"type\":\"UserPreferences\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"eventRegistrations\",\"kind\":\"object\",\"type\":\"EventRegistration\",\"relationName\":\"EventRegistrationToUser\"}],\"dbName\":null},\"UserPreferences\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"homeBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventsBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"leaderboardBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"theme\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Event\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"EventStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"registrations\",\"kind\":\"object\",\"type\":\"EventRegistration\",\"relationName\":\"EventToEventRegistration\"}],\"dbName\":null},\"EventRegistration\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"EventRegistrationToUser\"},{\"name\":\"event\",\"kind\":\"object\",\"type\":\"Event\",\"relationName\":\"EventToEventRegistration\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"SitePreferences\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventsBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"leaderboardBackground\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") async function decodeBase64AsWasm(wasmBase64: string): Promise { const { Buffer } = await import('node:buffer') diff --git a/prisma/generated/prisma/internal/prismaNamespace.ts b/prisma/generated/prisma/internal/prismaNamespace.ts index fd51dc1..a1a63a9 100644 --- a/prisma/generated/prisma/internal/prismaNamespace.ts +++ b/prisma/generated/prisma/internal/prismaNamespace.ts @@ -828,6 +828,7 @@ export const UserScalarFieldEnum = { maxXp: 'maxXp', avatar: 'avatar', bio: 'bio', + characterClass: 'characterClass', createdAt: 'createdAt', updatedAt: 'updatedAt' } as const @@ -928,6 +929,13 @@ export type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'In +/** + * Reference to a field of type 'CharacterClass' + */ +export type EnumCharacterClassFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'CharacterClass'> + + + /** * Reference to a field of type 'DateTime' */ diff --git a/prisma/generated/prisma/internal/prismaNamespaceBrowser.ts b/prisma/generated/prisma/internal/prismaNamespaceBrowser.ts index acc78a9..1c0cb95 100644 --- a/prisma/generated/prisma/internal/prismaNamespaceBrowser.ts +++ b/prisma/generated/prisma/internal/prismaNamespaceBrowser.ts @@ -85,6 +85,7 @@ export const UserScalarFieldEnum = { maxXp: 'maxXp', avatar: 'avatar', bio: 'bio', + characterClass: 'characterClass', createdAt: 'createdAt', updatedAt: 'updatedAt' } as const diff --git a/prisma/generated/prisma/models/User.ts b/prisma/generated/prisma/models/User.ts index a4d10f0..f091c98 100644 --- a/prisma/generated/prisma/models/User.ts +++ b/prisma/generated/prisma/models/User.ts @@ -58,6 +58,7 @@ export type UserMinAggregateOutputType = { maxXp: number | null avatar: string | null bio: string | null + characterClass: $Enums.CharacterClass | null createdAt: Date | null updatedAt: Date | null } @@ -76,6 +77,7 @@ export type UserMaxAggregateOutputType = { maxXp: number | null avatar: string | null bio: string | null + characterClass: $Enums.CharacterClass | null createdAt: Date | null updatedAt: Date | null } @@ -94,6 +96,7 @@ export type UserCountAggregateOutputType = { maxXp: number avatar: number bio: number + characterClass: number createdAt: number updatedAt: number _all: number @@ -132,6 +135,7 @@ export type UserMinAggregateInputType = { maxXp?: true avatar?: true bio?: true + characterClass?: true createdAt?: true updatedAt?: true } @@ -150,6 +154,7 @@ export type UserMaxAggregateInputType = { maxXp?: true avatar?: true bio?: true + characterClass?: true createdAt?: true updatedAt?: true } @@ -168,6 +173,7 @@ export type UserCountAggregateInputType = { maxXp?: true avatar?: true bio?: true + characterClass?: true createdAt?: true updatedAt?: true _all?: true @@ -273,6 +279,7 @@ export type UserGroupByOutputType = { maxXp: number avatar: string | null bio: string | null + characterClass: $Enums.CharacterClass | null createdAt: Date updatedAt: Date _count: UserCountAggregateOutputType | null @@ -314,6 +321,7 @@ export type UserWhereInput = { maxXp?: Prisma.IntFilter<"User"> | number avatar?: Prisma.StringNullableFilter<"User"> | string | null bio?: Prisma.StringNullableFilter<"User"> | string | null + characterClass?: Prisma.EnumCharacterClassNullableFilter<"User"> | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFilter<"User"> | Date | string updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string preferences?: Prisma.XOR | null @@ -334,6 +342,7 @@ export type UserOrderByWithRelationInput = { maxXp?: Prisma.SortOrder avatar?: Prisma.SortOrderInput | Prisma.SortOrder bio?: Prisma.SortOrderInput | Prisma.SortOrder + characterClass?: Prisma.SortOrderInput | Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder preferences?: Prisma.UserPreferencesOrderByWithRelationInput @@ -357,6 +366,7 @@ export type UserWhereUniqueInput = Prisma.AtLeast<{ maxXp?: Prisma.IntFilter<"User"> | number avatar?: Prisma.StringNullableFilter<"User"> | string | null bio?: Prisma.StringNullableFilter<"User"> | string | null + characterClass?: Prisma.EnumCharacterClassNullableFilter<"User"> | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFilter<"User"> | Date | string updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string preferences?: Prisma.XOR | null @@ -377,6 +387,7 @@ export type UserOrderByWithAggregationInput = { maxXp?: Prisma.SortOrder avatar?: Prisma.SortOrderInput | Prisma.SortOrder bio?: Prisma.SortOrderInput | Prisma.SortOrder + characterClass?: Prisma.SortOrderInput | Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder _count?: Prisma.UserCountOrderByAggregateInput @@ -403,6 +414,7 @@ export type UserScalarWhereWithAggregatesInput = { maxXp?: Prisma.IntWithAggregatesFilter<"User"> | number avatar?: Prisma.StringNullableWithAggregatesFilter<"User"> | string | null bio?: Prisma.StringNullableWithAggregatesFilter<"User"> | string | null + characterClass?: Prisma.EnumCharacterClassNullableWithAggregatesFilter<"User"> | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeWithAggregatesFilter<"User"> | Date | string updatedAt?: Prisma.DateTimeWithAggregatesFilter<"User"> | Date | string } @@ -421,6 +433,7 @@ export type UserCreateInput = { maxXp?: number avatar?: string | null bio?: string | null + characterClass?: $Enums.CharacterClass | null createdAt?: Date | string updatedAt?: Date | string preferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput @@ -441,6 +454,7 @@ export type UserUncheckedCreateInput = { maxXp?: number avatar?: string | null bio?: string | null + characterClass?: $Enums.CharacterClass | null createdAt?: Date | string updatedAt?: Date | string preferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput @@ -461,6 +475,7 @@ export type UserUpdateInput = { maxXp?: Prisma.IntFieldUpdateOperationsInput | number avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + characterClass?: Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string preferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput @@ -481,6 +496,7 @@ export type UserUncheckedUpdateInput = { maxXp?: Prisma.IntFieldUpdateOperationsInput | number avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + characterClass?: Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string preferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput @@ -501,6 +517,7 @@ export type UserCreateManyInput = { maxXp?: number avatar?: string | null bio?: string | null + characterClass?: $Enums.CharacterClass | null createdAt?: Date | string updatedAt?: Date | string } @@ -519,6 +536,7 @@ export type UserUpdateManyMutationInput = { maxXp?: Prisma.IntFieldUpdateOperationsInput | number avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + characterClass?: Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string } @@ -537,6 +555,7 @@ export type UserUncheckedUpdateManyInput = { maxXp?: Prisma.IntFieldUpdateOperationsInput | number avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + characterClass?: Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string } @@ -555,6 +574,7 @@ export type UserCountOrderByAggregateInput = { maxXp?: Prisma.SortOrder avatar?: Prisma.SortOrder bio?: Prisma.SortOrder + characterClass?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder } @@ -582,6 +602,7 @@ export type UserMaxOrderByAggregateInput = { maxXp?: Prisma.SortOrder avatar?: Prisma.SortOrder bio?: Prisma.SortOrder + characterClass?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder } @@ -600,6 +621,7 @@ export type UserMinOrderByAggregateInput = { maxXp?: Prisma.SortOrder avatar?: Prisma.SortOrder bio?: Prisma.SortOrder + characterClass?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder } @@ -638,6 +660,10 @@ export type NullableStringFieldUpdateOperationsInput = { set?: string | null } +export type NullableEnumCharacterClassFieldUpdateOperationsInput = { + set?: $Enums.CharacterClass | null +} + export type DateTimeFieldUpdateOperationsInput = { set?: Date | string } @@ -684,6 +710,7 @@ export type UserCreateWithoutPreferencesInput = { maxXp?: number avatar?: string | null bio?: string | null + characterClass?: $Enums.CharacterClass | null createdAt?: Date | string updatedAt?: Date | string eventRegistrations?: Prisma.EventRegistrationCreateNestedManyWithoutUserInput @@ -703,6 +730,7 @@ export type UserUncheckedCreateWithoutPreferencesInput = { maxXp?: number avatar?: string | null bio?: string | null + characterClass?: $Enums.CharacterClass | null createdAt?: Date | string updatedAt?: Date | string eventRegistrations?: Prisma.EventRegistrationUncheckedCreateNestedManyWithoutUserInput @@ -738,6 +766,7 @@ export type UserUpdateWithoutPreferencesInput = { maxXp?: Prisma.IntFieldUpdateOperationsInput | number avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + characterClass?: Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string eventRegistrations?: Prisma.EventRegistrationUpdateManyWithoutUserNestedInput @@ -757,6 +786,7 @@ export type UserUncheckedUpdateWithoutPreferencesInput = { maxXp?: Prisma.IntFieldUpdateOperationsInput | number avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + characterClass?: Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string eventRegistrations?: Prisma.EventRegistrationUncheckedUpdateManyWithoutUserNestedInput @@ -776,6 +806,7 @@ export type UserCreateWithoutEventRegistrationsInput = { maxXp?: number avatar?: string | null bio?: string | null + characterClass?: $Enums.CharacterClass | null createdAt?: Date | string updatedAt?: Date | string preferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput @@ -795,6 +826,7 @@ export type UserUncheckedCreateWithoutEventRegistrationsInput = { maxXp?: number avatar?: string | null bio?: string | null + characterClass?: $Enums.CharacterClass | null createdAt?: Date | string updatedAt?: Date | string preferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput @@ -830,6 +862,7 @@ export type UserUpdateWithoutEventRegistrationsInput = { maxXp?: Prisma.IntFieldUpdateOperationsInput | number avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + characterClass?: Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string preferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput @@ -849,6 +882,7 @@ export type UserUncheckedUpdateWithoutEventRegistrationsInput = { maxXp?: Prisma.IntFieldUpdateOperationsInput | number avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + characterClass?: Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput | $Enums.CharacterClass | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string preferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput @@ -899,6 +933,7 @@ export type UserSelect @@ -920,6 +955,7 @@ export type UserSelectCreateManyAndReturn @@ -938,6 +974,7 @@ export type UserSelectUpdateManyAndReturn @@ -956,11 +993,12 @@ export type UserSelectScalar = { maxXp?: boolean avatar?: boolean bio?: boolean + characterClass?: boolean createdAt?: boolean updatedAt?: boolean } -export type UserOmit = runtime.Types.Extensions.GetOmit<"id" | "email" | "password" | "username" | "role" | "score" | "level" | "hp" | "maxHp" | "xp" | "maxXp" | "avatar" | "bio" | "createdAt" | "updatedAt", ExtArgs["result"]["user"]> +export type UserOmit = runtime.Types.Extensions.GetOmit<"id" | "email" | "password" | "username" | "role" | "score" | "level" | "hp" | "maxHp" | "xp" | "maxXp" | "avatar" | "bio" | "characterClass" | "createdAt" | "updatedAt", ExtArgs["result"]["user"]> export type UserInclude = { preferences?: boolean | Prisma.User$preferencesArgs eventRegistrations?: boolean | Prisma.User$eventRegistrationsArgs @@ -989,6 +1027,7 @@ export type $UserPayload @@ -1429,6 +1468,7 @@ export interface UserFieldRefs { readonly maxXp: Prisma.FieldRef<"User", 'Int'> readonly avatar: Prisma.FieldRef<"User", 'String'> readonly bio: Prisma.FieldRef<"User", 'String'> + readonly characterClass: Prisma.FieldRef<"User", 'CharacterClass'> readonly createdAt: Prisma.FieldRef<"User", 'DateTime'> readonly updatedAt: Prisma.FieldRef<"User", 'DateTime'> } diff --git a/prisma/migrations/20251209210032_add_character_class/migration.sql b/prisma/migrations/20251209210032_add_character_class/migration.sql new file mode 100644 index 0000000..0666ad7 --- /dev/null +++ b/prisma/migrations/20251209210032_add_character_class/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "User" ADD COLUMN "characterClass" TEXT; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 4d7efdc..0d5fbfd 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -28,6 +28,19 @@ enum EventStatus { PAST } +enum CharacterClass { + WARRIOR + MAGE + ROGUE + RANGER + PALADIN + ENGINEER + MERCHANT + SCHOLAR + BERSERKER + NECROMANCER +} + model User { id String @id @default(cuid()) email String @unique @@ -42,6 +55,7 @@ model User { maxXp Int @default(5000) avatar String? bio String? + characterClass CharacterClass? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt preferences UserPreferences?