|
generator client { |
|
provider = "prisma-client-js" |
|
} |
|
|
|
datasource db { |
|
provider = "postgresql" |
|
url = env("DATABASE_URL") |
|
} |
|
|
|
model User { |
|
id Int @id @default(autoincrement()) |
|
name String |
|
voiceId String? |
|
voiceLanguage String? |
|
audioUrl String? |
|
createdAt DateTime @default(now()) |
|
updatedAt DateTime @updatedAt |
|
groups GroupMember[] |
|
invitations Invitation[] @relation("InvitedUser") |
|
createdGroups Group[] @relation("GroupCreator") |
|
} |
|
|
|
model Group { |
|
id Int @id @default(autoincrement()) |
|
name String |
|
inviteCode String @unique |
|
status String @default("WAITING") |
|
createdAt DateTime @default(now()) |
|
updatedAt DateTime @updatedAt |
|
creator User @relation("GroupCreator", fields: [creatorId], references: [id]) |
|
creatorId Int |
|
members GroupMember[] |
|
invitations Invitation[] |
|
gameState GameState? |
|
} |
|
|
|
model GroupMember { |
|
id Int @id @default(autoincrement()) |
|
group Group @relation(fields: [groupId], references: [id]) |
|
groupId Int |
|
user User @relation(fields: [userId], references: [id]) |
|
userId Int |
|
joinedAt DateTime @default(now()) |
|
isReady Boolean @default(false) |
|
|
|
@@unique([groupId, userId]) |
|
} |
|
|
|
model Invitation { |
|
id Int @id @default(autoincrement()) |
|
group Group @relation(fields: [groupId], references: [id]) |
|
groupId Int |
|
user User? @relation("InvitedUser", fields: [userId], references: [id]) |
|
userId Int? |
|
email String? |
|
status InvitationStatus @default(PENDING) |
|
createdAt DateTime @default(now()) |
|
expiresAt DateTime? |
|
} |
|
|
|
model GameState { |
|
id Int @id @default(autoincrement()) |
|
group Group @relation(fields: [groupId], references: [id]) |
|
groupId Int @unique |
|
status GameStatus @default(WAITING) |
|
stolenVoicePlayerId Int? |
|
currentRound Int @default(0) |
|
startedAt DateTime? |
|
endedAt DateTime? |
|
rounds GameRound[] |
|
} |
|
|
|
model GameRound { |
|
id Int @id @default(autoincrement()) |
|
gameState GameState @relation(fields: [gameStateId], references: [id]) |
|
gameStateId Int |
|
roundNumber Int |
|
speakerId Int |
|
guesses Guess[] |
|
startedAt DateTime @default(now()) |
|
endedAt DateTime? |
|
} |
|
|
|
model Guess { |
|
id Int @id @default(autoincrement()) |
|
gameRound GameRound @relation(fields: [gameRoundId], references: [id]) |
|
gameRoundId Int |
|
guesserId Int |
|
guessedId Int |
|
isCorrect Boolean |
|
createdAt DateTime @default(now()) |
|
} |
|
|
|
enum InvitationStatus { |
|
PENDING |
|
ACCEPTED |
|
DECLINED |
|
EXPIRED |
|
} |
|
|
|
enum GameStatus { |
|
WAITING |
|
ANSWERS |
|
DEBATE |
|
VOTE |
|
FINISHED |
|
CANCELLED |
|
} |