167 lines
5.1 KiB
Plaintext
167 lines
5.1 KiB
Plaintext
generator client {
|
|
provider = "prisma-client"
|
|
output = "./generated/prisma"
|
|
}
|
|
|
|
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?
|
|
challengesBackground String?
|
|
eventRegistrationPoints Int @default(100)
|
|
eventFeedbackPoints Int @default(100)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
enum Role {
|
|
USER
|
|
ADMIN
|
|
}
|
|
|
|
enum EventType {
|
|
ATELIER
|
|
KATA
|
|
PRESENTATION
|
|
LEARNING_HOUR
|
|
}
|
|
|
|
enum CharacterClass {
|
|
WARRIOR
|
|
MAGE
|
|
ROGUE
|
|
RANGER
|
|
PALADIN
|
|
ENGINEER
|
|
MERCHANT
|
|
SCHOLAR
|
|
BERSERKER
|
|
NECROMANCER
|
|
}
|
|
|
|
enum ChallengeStatus {
|
|
PENDING
|
|
ACCEPTED
|
|
COMPLETED
|
|
REJECTED
|
|
CANCELLED
|
|
}
|
|
|
|
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
|
|
|
|
@@index([challengerId])
|
|
@@index([challengedId])
|
|
@@index([status])
|
|
@@index([adminId])
|
|
}
|