Add dotenv package for environment variable management and update pnpm-lock.yaml. Adjust layout in RegisterPage and LoginPage components for improved responsiveness. Enhance AdminPanel with ChallengeManagement section and update navigation links for challenges. Refactor Prisma schema to include Challenge model and related enums.

This commit is contained in:
Julien Froidefond
2025-12-15 15:16:54 +01:00
parent f2bb02406e
commit bbb0fbb9a1
34 changed files with 11414 additions and 9081 deletions

View File

@@ -1,6 +1,3 @@
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client"
output = "./generated/prisma"
@@ -10,6 +7,103 @@ datasource db {
provider = "sqlite"
}
model User {
id String @id @default(cuid())
email String @unique
password String
username String @unique
role Role @default(USER)
score Int @default(0)
level Int @default(1)
hp Int @default(1000)
maxHp Int @default(1000)
xp Int @default(0)
maxXp Int @default(5000)
avatar String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
bio String?
characterClass CharacterClass?
eventFeedbacks EventFeedback[]
eventRegistrations EventRegistration[]
preferences UserPreferences?
challengesAsChallenger Challenge[] @relation("Challenger")
challengesAsChallenged Challenge[] @relation("Challenged")
challengesAsAdmin Challenge[] @relation("AdminValidator")
challengesAsWinner Challenge[] @relation("ChallengeWinner")
@@index([score])
@@index([email])
}
model UserPreferences {
id String @id @default(cuid())
userId String @unique
homeBackground String?
eventsBackground String?
leaderboardBackground String?
theme String? @default("default")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model Event {
id String @id @default(cuid())
date DateTime
name String
description String
type EventType
room String?
time String?
maxPlaces Int?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
feedbacks EventFeedback[]
registrations EventRegistration[]
@@index([date])
}
model EventRegistration {
id String @id @default(cuid())
userId String
eventId String
createdAt DateTime @default(now())
event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([userId, eventId])
@@index([userId])
@@index([eventId])
}
model EventFeedback {
id String @id @default(cuid())
userId String
eventId String
rating Int
comment String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([userId, eventId])
@@index([userId])
@@index([eventId])
}
model SitePreferences {
id String @id @default("global")
homeBackground String?
eventsBackground String?
leaderboardBackground String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
primaryColor String? @default("#0be4cc")
}
enum Role {
USER
ADMIN
@@ -35,99 +129,36 @@ enum CharacterClass {
NECROMANCER
}
model User {
id String @id @default(cuid())
email String @unique
password String
username String @unique
role Role @default(USER)
score Int @default(0)
level Int @default(1)
hp Int @default(1000)
maxHp Int @default(1000)
xp Int @default(0)
maxXp Int @default(5000)
avatar String?
bio String?
characterClass CharacterClass?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
preferences UserPreferences?
eventRegistrations EventRegistration[]
eventFeedbacks EventFeedback[]
@@index([score])
@@index([email])
enum ChallengeStatus {
PENDING
ACCEPTED
COMPLETED
REJECTED
CANCELLED
}
model UserPreferences {
id String @id @default(cuid())
userId String @unique
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
model Challenge {
id String @id @default(cuid())
challengerId String // Joueur qui lance le défi
challengedId String // Joueur qui reçoit le défi
challenger User @relation("Challenger", fields: [challengerId], references: [id], onDelete: Cascade)
challenged User @relation("Challenged", fields: [challengedId], references: [id], onDelete: Cascade)
title String // Titre du défi
description String // Description détaillée du défi
pointsReward Int @default(100) // Points à gagner pour le gagnant
status ChallengeStatus @default(PENDING)
adminId String? // Admin qui valide le défi
admin User? @relation("AdminValidator", fields: [adminId], references: [id], onDelete: SetNull)
adminComment String? // Commentaire de l'admin lors de la validation/rejet
winnerId String? // ID du gagnant (challengerId ou challengedId)
winner User? @relation("ChallengeWinner", fields: [winnerId], references: [id], onDelete: SetNull)
createdAt DateTime @default(now())
acceptedAt DateTime? // Date d'acceptation du défi
completedAt DateTime? // Date de validation par l'admin
updatedAt DateTime @updatedAt
// Background images for each page
homeBackground String?
eventsBackground String?
leaderboardBackground String?
// Other UI preferences can be added here
theme String? @default("default")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Event {
id String @id @default(cuid())
date DateTime
name String
description String
type EventType
room String?
time String?
maxPlaces Int?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
registrations EventRegistration[]
feedbacks EventFeedback[]
@@index([date])
}
model EventRegistration {
id String @id @default(cuid())
userId String
eventId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
@@unique([userId, eventId])
@@index([userId])
@@index([eventId])
}
model EventFeedback {
id String @id @default(cuid())
userId String
eventId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)
rating Int // Note de 1 à 5
comment String? // Commentaire optionnel
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([userId, eventId])
@@index([userId])
@@index([eventId])
}
model SitePreferences {
id String @id @default("global")
homeBackground String?
eventsBackground String?
leaderboardBackground String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([challengerId])
@@index([challengedId])
@@index([status])
@@index([adminId])
}