Files
got-gaming/prisma/schema.prisma

169 lines
5.2 KiB
Plaintext

generator client {
provider = "prisma-client"
output = "./generated/prisma"
}
datasource db {
provider = "postgresql"
}
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?
isRead Boolean @default(false)
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])
@@index([isRead])
}
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])
}