100 lines
2.7 KiB
Plaintext
100 lines
2.7 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
// --- МОДЕЛИ ---
|
|
|
|
model User {
|
|
id Int @id @default(autoincrement())
|
|
email String @unique
|
|
password String // Хеш пароля
|
|
name String?
|
|
inviteCode String @unique // Уникальный код типа "#USER-1234"
|
|
|
|
surveys Survey[] @relation("CreatedSurveys") // Опросы, которые я создал
|
|
submissions Submission[] // Опросы, которые я прошел
|
|
|
|
allowedIn AllowedAccess[] // Куда меня пригласили
|
|
}
|
|
|
|
model Survey {
|
|
id Int @id @default(autoincrement())
|
|
title String
|
|
description String?
|
|
isPublished Boolean @default(false)
|
|
accessType AccessType @default(PUBLIC) // PUBLIC, INVITE_ONLY
|
|
createdAt DateTime @default(now())
|
|
|
|
authorId Int
|
|
author User @relation("CreatedSurveys", fields: [authorId], references: [id])
|
|
|
|
questions Question[]
|
|
submissions Submission[]
|
|
allowedUsers AllowedAccess[]
|
|
}
|
|
|
|
enum AccessType {
|
|
PUBLIC
|
|
INVITE_ONLY
|
|
}
|
|
|
|
model Question {
|
|
id Int @id @default(autoincrement())
|
|
surveyId Int
|
|
survey Survey @relation(fields: [surveyId], references: [id], onDelete: Cascade)
|
|
|
|
text String
|
|
type QuestionType @default(SINGLE)
|
|
points Int @default(0)
|
|
order Int @default(0)
|
|
|
|
options Option[]
|
|
}
|
|
|
|
enum QuestionType {
|
|
SINGLE // Один выбор (Radio)
|
|
MULTI // Множественный (Checkbox)
|
|
// TEXT - можно добавить позже
|
|
}
|
|
|
|
model Option {
|
|
id Int @id @default(autoincrement())
|
|
questionId Int
|
|
question Question @relation(fields: [questionId], references: [id], onDelete: Cascade)
|
|
|
|
text String
|
|
isCorrect Boolean @default(false) // Правильный ли это ответ?
|
|
}
|
|
|
|
// Белый список для приватных опросов
|
|
model AllowedAccess {
|
|
id Int @id @default(autoincrement())
|
|
surveyId Int
|
|
userId Int
|
|
|
|
// ДОБАВЛЕНО: onDelete: Cascade
|
|
survey Survey @relation(fields: [surveyId], references: [id], onDelete: Cascade)
|
|
user User @relation(fields: [userId], references: [id])
|
|
|
|
@@unique([surveyId, userId])
|
|
}
|
|
|
|
// Результаты прохождения
|
|
model Submission {
|
|
id Int @id @default(autoincrement())
|
|
surveyId Int
|
|
userId Int?
|
|
|
|
score Int
|
|
maxScore Int
|
|
completedAt DateTime @default(now())
|
|
|
|
// ДОБАВЛЕНО: onDelete: Cascade
|
|
survey Survey @relation(fields: [surveyId], references: [id], onDelete: Cascade)
|
|
user User? @relation(fields: [userId], references: [id])
|
|
} |