You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.9 KiB
114 lines
2.9 KiB
generator client { |
|
provider = "prisma-client-js" |
|
binaryTargets = ["native", "linux-musl-openssl-3.0.x", "linux-musl-arm64-openssl-3.0.x"] |
|
} |
|
|
|
datasource db { |
|
provider = "postgresql" |
|
url = env("DATABASE_URL") |
|
} |
|
|
|
enum Role { |
|
TUTOR |
|
STUDENT |
|
} |
|
|
|
model User { |
|
id Int @id @default(autoincrement()) |
|
username String @unique |
|
passwordHash String |
|
role Role |
|
displayName String? |
|
|
|
tutoringAssignments TutorAssignment[] @relation("TutorInAssignment") |
|
studentAssignment TutorAssignment? @relation("StudentInAssignment") |
|
|
|
questions Question[] |
|
chatMessages ChatMessage[] |
|
textbooks Textbook[] |
|
tests Test[] |
|
reports Report[] |
|
hallPhotos HallPhoto[] |
|
} |
|
|
|
model TutorAssignment { |
|
tutorId Int |
|
studentId Int @unique |
|
tutor User @relation("TutorInAssignment", fields: [tutorId], references: [id], onDelete: Cascade) |
|
student User @relation("StudentInAssignment", fields: [studentId], references: [id], onDelete: Cascade) |
|
|
|
@@id([tutorId, studentId]) |
|
} |
|
|
|
model Setting { |
|
key String @id |
|
value String |
|
} |
|
|
|
model ChatMessage { |
|
id Int @id @default(autoincrement()) |
|
studentId Int |
|
student User @relation(fields: [studentId], references: [id], onDelete: Cascade) |
|
role String |
|
content String |
|
createdAt DateTime @default(now()) |
|
} |
|
|
|
model Question { |
|
id Int @id @default(autoincrement()) |
|
studentId Int |
|
student User @relation(fields: [studentId], references: [id], onDelete: Cascade) |
|
text String |
|
answer String? |
|
date String |
|
createdAt DateTime @default(now()) |
|
} |
|
|
|
model Textbook { |
|
id Int @id @default(autoincrement()) |
|
studentId Int |
|
student User @relation(fields: [studentId], references: [id], onDelete: Cascade) |
|
topic String |
|
content String |
|
createdAt DateTime @default(now()) |
|
} |
|
|
|
model Test { |
|
id Int @id @default(autoincrement()) |
|
studentId Int |
|
student User @relation(fields: [studentId], references: [id], onDelete: Cascade) |
|
topic String |
|
questions String |
|
createdAt DateTime @default(now()) |
|
results TestResult[] |
|
} |
|
|
|
model TestResult { |
|
id Int @id @default(autoincrement()) |
|
testId Int |
|
answers String |
|
score Int |
|
total Int |
|
createdAt DateTime @default(now()) |
|
test Test @relation(fields: [testId], references: [id], onDelete: Cascade) |
|
} |
|
|
|
model Report { |
|
id Int @id @default(autoincrement()) |
|
studentId Int |
|
student User @relation(fields: [studentId], references: [id], onDelete: Cascade) |
|
date String |
|
content String |
|
createdAt DateTime @default(now()) |
|
} |
|
|
|
model HallPhoto { |
|
id Int @id @default(autoincrement()) |
|
studentId Int |
|
student User @relation(fields: [studentId], references: [id], onDelete: Cascade) |
|
date String |
|
fileName String |
|
originalName String @default("") |
|
mimeType String |
|
createdAt DateTime @default(now()) |
|
}
|
|
|