Files
2022-06-10 00:34:58 +02:00

146 lines
4.1 KiB
Plaintext

// Schema for the main database
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Event {
id Int @id @default(autoincrement()) // Primary key
pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid // Public key
date DateTime
name String
briefDescription String
fullDescription String?
disciplines Discipline[]
organisations Organisation[]
visual Media[]
}
model Admin {
id Int @id @default(autoincrement())
pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String @unique
password String // TODO: Probably specify hash size (VarChar or some other type)
permission_level AdminLevel @default(STANDARD)
revision DateTime @default(now())
groups Group[]
}
model Discipline {
id Int @id @default(autoincrement())
pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String
briefDescription String @default("description")
fullDescription String?
minTeamSize Int
maxTeamSize Int
roles RoleSchema[]
teams Team[]
event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)
eventId Int
visual Media[]
}
model RoleSchema {
id Int @id @default(autoincrement())
pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String
schema Json
roles Role[]
discipline Discipline @relation(fields: [disciplineId], references: [id], onDelete: Cascade)
disciplineId Int
visual Media[]
}
model Team {
id Int @id @default(autoincrement())
pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String
leaderEmail String
verified Boolean @default(false)
roles Role[] @relation(name: "participants")
participants Participant[]
discipline Discipline @relation(fields: [disciplineId], references: [id], onDelete: Cascade)
disciplineId Int
}
model Participant {
id Int @id @default(autoincrement())
pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
firstName String
lastName String
relevance Job
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
groupId Int
team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)
teamId Int
roles Role[]
}
model Role {
id Int @id @default(autoincrement())
pid String @unique @default(dbgenerated("gen_random_uuid()"))
score String
participant Participant? @relation(fields: [participantId], references: [id], onDelete: SetNull)
participantId Int?
team Team @relation(name: "participants", fields: [teamId], references: [id], onDelete: Cascade)
teamId Int
schema RoleSchema @relation(fields: [schemaId], references: [id], onDelete: Cascade)
schemaId Int
}
model Organisation {
id Int @id @default(autoincrement())
pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String
groups Group[]
event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)
eventId Int
}
model Group {
id Int @id @default(autoincrement())
pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String
user_limit Int @default(40)
level Int
organisation Organisation @relation(fields: [organisationId], references: [id], onDelete: Cascade)
organisationId Int
participants Participant[]
admins Admin[]
}
model Media {
id Int @id @default(autoincrement())
pid String @unique
description String @default("visual")
events Event[]
disciplines Discipline[]
roles RoleSchema[]
}
enum AdminLevel {
STANDARD
ELEVATED
}
enum Job {
TEAMLEADER
MEMBER
}