mirror of
https://litchi.icu/ngc2207/judge4c-db.git
synced 2025-05-18 19:16:33 +00:00
166 lines
4.8 KiB
Plaintext
166 lines
4.8 KiB
Plaintext
|
datasource db {
|
||
|
provider = "postgresql"
|
||
|
url = env("DATABASE_URL")
|
||
|
}
|
||
|
|
||
|
generator client {
|
||
|
provider = "prisma-client-js"
|
||
|
}
|
||
|
|
||
|
enum UserRole {
|
||
|
ADMIN
|
||
|
TEACHER
|
||
|
STUDENT
|
||
|
GUEST
|
||
|
}
|
||
|
|
||
|
model User {
|
||
|
id String @id @default(cuid())
|
||
|
email String @unique @db.VarChar(255)
|
||
|
displayName String? @db.VarChar(255)
|
||
|
hashedPassword String @default("")
|
||
|
passwordSalt String @default("")
|
||
|
role UserRole @default(GUEST)
|
||
|
createdAt DateTime @default(now()) @db.Timestamptz
|
||
|
updatedAt DateTime @updatedAt @db.Timestamptz
|
||
|
organizedEvents Event[] @relation("OrganizedEvents")
|
||
|
participatedEvents Event[] @relation("ParticipatedEvents")
|
||
|
createdQuestions Question[] @relation("CreatedQuestions")
|
||
|
submissions Submission[]
|
||
|
}
|
||
|
|
||
|
enum EventType {
|
||
|
COMPETITION
|
||
|
EXAM
|
||
|
HOMEWORK
|
||
|
}
|
||
|
|
||
|
model Event {
|
||
|
id String @id @default(cuid())
|
||
|
name String
|
||
|
startTime DateTime @db.Timestamptz
|
||
|
endTime DateTime @db.Timestamptz
|
||
|
isVisible Boolean @default(true)
|
||
|
type EventType @default(COMPETITION)
|
||
|
createdAt DateTime @default(now()) @db.Timestamptz
|
||
|
updatedAt DateTime @updatedAt @db.Timestamptz
|
||
|
organizer User[] @relation("OrganizedEvents")
|
||
|
participants User[] @relation("ParticipatedEvents")
|
||
|
eventQuestions EventQuestion[]
|
||
|
}
|
||
|
|
||
|
enum QuestionDifficulty {
|
||
|
EASY
|
||
|
MEDIUM
|
||
|
HARD
|
||
|
}
|
||
|
|
||
|
model Question {
|
||
|
id String @id @default(cuid())
|
||
|
name String
|
||
|
statement String @db.Text
|
||
|
difficulty QuestionDifficulty @default(EASY)
|
||
|
createdAt DateTime @default(now()) @db.Timestamptz
|
||
|
updatedAt DateTime @updatedAt @db.Timestamptz
|
||
|
creators User[] @relation("CreatedQuestions")
|
||
|
codeTemplates CodeTemplate[]
|
||
|
eventQuestions EventQuestion[]
|
||
|
tags QuestionTag[] @relation("QuestionTags")
|
||
|
}
|
||
|
|
||
|
model QuestionTag {
|
||
|
id String @id @default(cuid())
|
||
|
name String
|
||
|
createdAt DateTime @default(now()) @db.Timestamptz
|
||
|
updatedAt DateTime @updatedAt @db.Timestamptz
|
||
|
questions Question[] @relation("QuestionTags")
|
||
|
}
|
||
|
|
||
|
enum CodeLanguage {
|
||
|
C
|
||
|
CPP
|
||
|
JAVA
|
||
|
}
|
||
|
|
||
|
model CodeTemplate {
|
||
|
id String @id @default(cuid())
|
||
|
language CodeLanguage
|
||
|
starterCode String @db.Text
|
||
|
correctSolution String @default("") @db.Text
|
||
|
createdAt DateTime @default(now()) @db.Timestamptz
|
||
|
updatedAt DateTime @updatedAt @db.Timestamptz
|
||
|
question Question @relation(fields: [questionId], references: [id])
|
||
|
questionId String
|
||
|
}
|
||
|
|
||
|
model EventQuestion {
|
||
|
id String @id @default(cuid())
|
||
|
event Event @relation(fields: [eventId], references: [id])
|
||
|
eventId String
|
||
|
question Question @relation(fields: [questionId], references: [id])
|
||
|
questionId String
|
||
|
displayOrder Int @default(0)
|
||
|
hidden Boolean @default(false)
|
||
|
createdAt DateTime @default(now()) @db.Timestamptz
|
||
|
updatedAt DateTime @updatedAt @db.Timestamptz
|
||
|
submissions Submission[]
|
||
|
|
||
|
@@unique([eventId, questionId])
|
||
|
}
|
||
|
|
||
|
enum SubmissionStatus {
|
||
|
PENDING
|
||
|
ACCEPTED
|
||
|
REJECTED
|
||
|
COMPILATION_ERROR
|
||
|
RUNTIME_ERROR
|
||
|
INTERNAL_ERROR
|
||
|
PARTIAL_ACCEPTED
|
||
|
SKIPPED
|
||
|
}
|
||
|
|
||
|
model Submission {
|
||
|
id String @id @default(cuid())
|
||
|
submitter User @relation(fields: [submitterId], references: [id])
|
||
|
submitterId String @db.VarChar(255)
|
||
|
eventQuestion EventQuestion @relation(fields: [eventQuestionId], references: [id])
|
||
|
eventQuestionId String @db.VarChar(255)
|
||
|
language CodeLanguage
|
||
|
code String @db.Text
|
||
|
status SubmissionStatus
|
||
|
statusMessage String?
|
||
|
memoryUsage Int?
|
||
|
executionTime Int?
|
||
|
score Int? @default(0)
|
||
|
createdAt DateTime @default(now()) @db.Timestamptz
|
||
|
updatedAt DateTime @updatedAt @db.Timestamptz
|
||
|
testResults TestResult[]
|
||
|
}
|
||
|
|
||
|
enum TestResultStatus {
|
||
|
ACCEPTED
|
||
|
REJECTED
|
||
|
TIMEOUT
|
||
|
MEMORY_LIMIT_EXCEEDED
|
||
|
COMPILATION_ERROR
|
||
|
RUNTIME_ERROR
|
||
|
INTERNAL_ERROR
|
||
|
OUTPUT_MISMATCH
|
||
|
SKIPPED
|
||
|
}
|
||
|
|
||
|
model TestResult {
|
||
|
id String @id @default(cuid())
|
||
|
submission Submission @relation(fields: [submissionId], references: [id])
|
||
|
submissionId String
|
||
|
input String @db.Text
|
||
|
output String @db.Text
|
||
|
status TestResultStatus
|
||
|
statusMessage String?
|
||
|
memoryUsage Int?
|
||
|
executionTime Int?
|
||
|
score Int? @default(0)
|
||
|
createdAt DateTime @default(now()) @db.Timestamptz
|
||
|
updatedAt DateTime @updatedAt @db.Timestamptz
|
||
|
}
|