first commit
This commit is contained in:
252
prisma/schema.prisma
Normal file
252
prisma/schema.prisma
Normal file
@@ -0,0 +1,252 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
enum Role {
|
||||
USER
|
||||
ADMIN
|
||||
}
|
||||
|
||||
enum Position {
|
||||
GK
|
||||
DEF
|
||||
MID
|
||||
FWD
|
||||
}
|
||||
|
||||
enum MatchStage {
|
||||
GROUP
|
||||
ROUND_OF_16
|
||||
QUARTER_FINAL
|
||||
SEMI_FINAL
|
||||
THIRD_PLACE
|
||||
FINAL
|
||||
}
|
||||
|
||||
enum MatchStatus {
|
||||
SCHEDULED
|
||||
LIVE
|
||||
FINISHED
|
||||
}
|
||||
|
||||
enum TeamStatus {
|
||||
ACTIVE
|
||||
INACTIVE
|
||||
}
|
||||
|
||||
enum PaymentStatus {
|
||||
PENDING
|
||||
SUCCESS
|
||||
FAILED
|
||||
}
|
||||
|
||||
enum EventType {
|
||||
GOAL
|
||||
ASSIST
|
||||
YELLOW_CARD
|
||||
RED_CARD
|
||||
SECOND_YELLOW
|
||||
SUBSTITUTION_IN
|
||||
SUBSTITUTION_OUT
|
||||
INJURY_NO_SUB
|
||||
CLEAN_SHEET
|
||||
PENALTY_SAVED
|
||||
PENALTY_MISSED
|
||||
OWN_GOAL
|
||||
EXTRA_TIME_BONUS
|
||||
MOTM
|
||||
}
|
||||
|
||||
model Country {
|
||||
id String @id @default(cuid())
|
||||
name String @unique
|
||||
code String @unique
|
||||
flagUrl String?
|
||||
defaultFormation String @default("4-3-3")
|
||||
group Group? @relation(fields: [groupId], references: [id])
|
||||
groupId String?
|
||||
isEliminated Boolean @default(false)
|
||||
players Player[]
|
||||
homeMatches Match[] @relation("HomeTeam")
|
||||
awayMatches Match[] @relation("AwayTeam")
|
||||
}
|
||||
|
||||
model Group {
|
||||
id String @id @default(cuid())
|
||||
name String @unique
|
||||
countries Country[]
|
||||
}
|
||||
|
||||
model Player {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
position Position
|
||||
countryId String
|
||||
country Country @relation(fields: [countryId], references: [id])
|
||||
price Float @default(5.0)
|
||||
totalPoints Int @default(0)
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
matchStats PlayerMatchStat[]
|
||||
teamPlayers TeamPlayer[]
|
||||
events MatchEvent[]
|
||||
}
|
||||
|
||||
model Match {
|
||||
id String @id @default(cuid())
|
||||
homeTeamId String
|
||||
awayTeamId String
|
||||
homeTeam Country @relation("HomeTeam", fields: [homeTeamId], references: [id])
|
||||
awayTeam Country @relation("AwayTeam", fields: [awayTeamId], references: [id])
|
||||
homeScore Int?
|
||||
awayScore Int?
|
||||
stage MatchStage @default(GROUP)
|
||||
status MatchStatus @default(SCHEDULED)
|
||||
matchDate DateTime
|
||||
roundId String?
|
||||
round Round? @relation(fields: [roundId], references: [id])
|
||||
playerStats PlayerMatchStat[]
|
||||
events MatchEvent[]
|
||||
lineups MatchLineup[]
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
model Round {
|
||||
id String @id @default(cuid())
|
||||
number Int @unique
|
||||
name String
|
||||
isActive Boolean @default(false)
|
||||
deadline DateTime
|
||||
matches Match[]
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
model MatchEvent {
|
||||
id String @id @default(cuid())
|
||||
matchId String
|
||||
playerId String
|
||||
match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)
|
||||
player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)
|
||||
type EventType
|
||||
minute Int?
|
||||
extraInfo String?
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
model MatchLineup {
|
||||
id String @id @default(cuid())
|
||||
matchId String
|
||||
countryId String
|
||||
match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)
|
||||
formation String
|
||||
playerIds String[]
|
||||
}
|
||||
|
||||
model PlayerMatchStat {
|
||||
id String @id @default(cuid())
|
||||
playerId String
|
||||
matchId String
|
||||
player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)
|
||||
match Match @relation(fields: [matchId], references: [id], onDelete: Cascade)
|
||||
goals Int @default(0)
|
||||
assists Int @default(0)
|
||||
yellowCards Int @default(0)
|
||||
redCards Int @default(0)
|
||||
minutesPlayed Int @default(0)
|
||||
cleanSheet Boolean @default(false)
|
||||
penaltySaved Int @default(0)
|
||||
penaltyMissed Int @default(0)
|
||||
ownGoals Int @default(0)
|
||||
isMotm Boolean @default(false)
|
||||
extraTimeBonus Int @default(0)
|
||||
points Int @default(0)
|
||||
|
||||
@@unique([playerId, matchId])
|
||||
}
|
||||
|
||||
model ScoringRule {
|
||||
id String @id @default(cuid())
|
||||
position Position
|
||||
eventType EventType
|
||||
points Int
|
||||
updatedAt DateTime @updatedAt
|
||||
updatedBy String?
|
||||
|
||||
@@unique([position, eventType])
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
name String?
|
||||
email String @unique
|
||||
password String
|
||||
role Role @default(USER)
|
||||
createdAt DateTime @default(now())
|
||||
team Team?
|
||||
sessions Session[]
|
||||
payments Payment[]
|
||||
}
|
||||
|
||||
model Session {
|
||||
id String @id @default(cuid())
|
||||
sessionToken String @unique
|
||||
userId String
|
||||
expires DateTime
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model Team {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
userId String @unique
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
budget Float @default(100.0)
|
||||
totalPoints Int @default(0)
|
||||
formation String @default("4-3-3")
|
||||
status TeamStatus @default(INACTIVE)
|
||||
createdAt DateTime @default(now())
|
||||
players TeamPlayer[]
|
||||
}
|
||||
|
||||
model TeamPlayer {
|
||||
teamId String
|
||||
playerId String
|
||||
isCaptain Boolean @default(false)
|
||||
isViceCaptain Boolean @default(false)
|
||||
isBench Boolean @default(false)
|
||||
positionIndex Int @default(0)
|
||||
team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)
|
||||
player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@id([teamId, playerId])
|
||||
}
|
||||
|
||||
model Package {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
budgetBonus Float
|
||||
price Int
|
||||
description String?
|
||||
isActive Boolean @default(true)
|
||||
payments Payment[]
|
||||
}
|
||||
|
||||
model Payment {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
packageId String
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
package Package @relation(fields: [packageId], references: [id])
|
||||
amount Int
|
||||
authority String? @unique
|
||||
refId String?
|
||||
status PaymentStatus @default(PENDING)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
Reference in New Issue
Block a user