mirror of
https://github.com/detleph/server.git
synced 2026-09-04 23:45:00 +02:00
144 lines
4.0 KiB
Plaintext
144 lines
4.0 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
|
|
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
|
|
|
|
events Event[]
|
|
disciplines Discipline[]
|
|
roles RoleSchema[]
|
|
}
|
|
|
|
enum AdminLevel {
|
|
STANDARD
|
|
ELEVATED
|
|
}
|
|
|
|
enum Job {
|
|
TEAMLEADER
|
|
MEMBER
|
|
}
|