sto-k-odnomu/backend/prisma/schema.prisma
2026-01-03 17:07:04 +03:00

125 lines
3.1 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(uuid())
email String? @unique
name String?
createdAt DateTime @default(now())
// Связи
hostedRooms Room[] @relation("HostedRooms")
participants Participant[]
questionPacks QuestionPack[]
// Статистика
gamesPlayed Int @default(0)
gamesWon Int @default(0)
totalPoints Int @default(0)
}
model Room {
id String @id @default(uuid())
code String @unique // 6-символьный код
status RoomStatus @default(WAITING)
hostId String
createdAt DateTime @default(now())
expiresAt DateTime
// Настройки
maxPlayers Int @default(10)
allowSpectators Boolean @default(true)
timerEnabled Boolean @default(false)
timerDuration Int @default(30)
questionPackId String
autoAdvance Boolean @default(false)
// Состояние игры
currentQuestionIndex Int @default(0)
revealedAnswers Json @default("{}")
currentPlayerId String?
isGameOver Boolean @default(false)
// Метрики
totalQuestions Int @default(0)
answeredQuestions Int @default(0)
startedAt DateTime?
finishedAt DateTime?
// Связи
host User @relation("HostedRooms", fields: [hostId], references: [id])
participants Participant[]
questionPack QuestionPack @relation(fields: [questionPackId], references: [id])
gameHistory GameHistory?
}
enum RoomStatus {
WAITING
PLAYING
FINISHED
}
model Participant {
id String @id @default(uuid())
userId String
roomId String
name String
role ParticipantRole
score Int @default(0)
joinedAt DateTime @default(now())
isActive Boolean @default(true)
user User @relation(fields: [userId], references: [id])
room Room @relation(fields: [roomId], references: [id], onDelete: Cascade)
@@unique([userId, roomId])
}
enum ParticipantRole {
HOST
PLAYER
SPECTATOR
}
model QuestionPack {
id String @id @default(uuid())
name String
description String
category String
isPublic Boolean @default(false)
createdBy String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
questions Json // Массив вопросов с ответами
questionCount Int @default(0)
timesUsed Int @default(0)
rating Float @default(0)
creator User @relation(fields: [createdBy], references: [id])
rooms Room[]
}
model GameHistory {
id String @id @default(uuid())
roomId String @unique
roomCode String
questionPackId String
startedAt DateTime
finishedAt DateTime
players Json // { userId: { name, score, rank } }
statistics Json // Детальная статистика игры
timeline Json // История событий игры
room Room @relation(fields: [roomId], references: [id], onDelete: Cascade)
}