schema.prisma 3.44 KiB
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
enum UserRole {
STUDENT
TEACHING_STAFF
ADMIN
}
enum TagType {
LANGUAGE
FRAMEWORK
THEME
USERDEFINED
}
model User {
id Int @id /// The user's id is the same as their gitlab id
name String?
mail String? @unique
role UserRole? @default(STUDENT)
gitlabUsername String @unique
gitlabLastInfo Json @default("{}") @db.Json
deleted Boolean @default(false)
assignments Assignment[]
exercises Exercise[]
}
model Assignment {
name String @id
secret String @unique @db.Char(36)
gitlabId Int
gitlabLink String
gitlabCreationInfo Json @db.Json
gitlabCreationDate DateTime
gitlabLastInfo Json @db.Json
gitlabLastInfoDate DateTime
published Boolean @default(false)
language Language @default(other)
useSonar Boolean @default(false)
allowSonarFailure Boolean @default(true)
sonarKey String?
sonarCreationInfo Json? @db.Json
sonarGate String?
sonarProfiles Json? @db.Json
exercises Exercise[]
staff User[]
tags Tag[]
}
model Exercise {
id String @id @db.Char(36)
assignmentName String
name String
secret String @unique @db.Char(36)
gitlabId Int
gitlabLink String
gitlabCreationInfo Json @db.Json
gitlabCreationDate DateTime
gitlabLastInfo Json @db.Json
gitlabLastInfoDate DateTime
deleted Boolean @default(false)
sonarKey String?
sonarCreationInfo Json? @db.Json
correctionCommit Json? @db.Json
correctionDescription String? @db.VarChar(80)
assignment Assignment @relation(fields: [assignmentName], references: [name], onDelete: NoAction, onUpdate: Cascade)
members User[]
results Result[]
tags Tag[]
}
model Result {
exerciseId String @db.Char(36)
dateTime DateTime @default(now())
success Boolean
sonarGatePass Boolean?
exitCode Int
commit Json @db.Json
results Json @db.Json
files Json @db.Json
exercise Exercise @relation(fields: [exerciseId], references: [id], onDelete: Cascade, onUpdate: Cascade)
@@id([exerciseId, dateTime])
}
model Tag {
name String @id @db.Char(36)
type TagType
assignments Assignment[]
exercises Exercise[]
}
model TagProposal {
name String @id @db.Char(36)
type TagType
state String @default("PendingApproval")
details String?
}
enum Language {
abap
ada
asm
bash
bqn
c
caml
cloudformation
cpp
csharp
css
cuda
dart
delphi
docker
erlang
f
fsharp
flex
fortran
futhark
go
groovy
haskell
hepial
json
jsp
java
js
julia
kotlin
kubernetes
latex
lisp
lua
matlab
objc
ocaml
pascal
pearl
perl
php
postscript
powershell
prolog
promela
python
r
ruby
rust
scala
sql
smalltalk
swift
terraform
text
ts
tsql
typst
vba
vbnet
web
xml
yaml
other
}