// 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 disciplines Discipline[] admins Admin[] organisations Organisation[] campaign Campaign? } model Campaign { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid expiresAt DateTime event Event @relation(fields: [eventId], references: [id]) links LinkObject[] eventId Int @unique } model LinkObject { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid link String campaign Campaign @relation(fields: [campaignId], references: [id]) campaignId Int group Group @relation(fields: [groupId], references: [id]) groupId Int @unique } model Admin { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid name String password String // TODO: Probably specify hash size (VarChar or some other type) permission_level LevelAdmin @default(STANDARD) event Event @relation(fields: [eventId], references: [id]) eventId Int } model Discipline { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid name String minTeamSize Int maxTeamSize Int roles Role[] teams Team[] event Event @relation(fields: [eventId], references: [id]) eventId Int } model Role { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid name String schema Json participant Participant[] discipline Discipline @relation(fields: [disciplineId], references: [id]) disciplineId Int } model Team { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid name String participants Participant[] @relation(name: "participants") discipline Discipline @relation(fields: [disciplineId], references: [id]) disciplineId Int leader Participant? @relation(name: "leader", fields: [leaderId], references: [id]) leaderId Int @unique } model Participant { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid firstName String lastName String email String gender Gender group Group @relation(fields: [groupId], references: [id]) groupId Int team Team @relation(name: "participants", fields: [teamId], references: [id]) teamId Int leaderOf Team? @relation(name: "leader") roles Role[] } 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]) 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) user_number Int @default(0) level Int oragnisation Organisation @relation(fields: [oragnisationId], references: [id]) oragnisationId Int participants Participant[] link LinkObject? } enum LevelAdmin { STANDARD ELEVATED } enum Gender { MALE FEMALE OTHERS }