// 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) creationDate DateTime @default(now()) 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 }