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 }