// 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 description String disciplines Discipline[] organisations Organisation[] campaign Campaign[] visual Media[] } model Campaign { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid start DateTime expiresAt DateTime links Link[] event Event @relation(fields: [eventId], references: [id], onDelete: Cascade) eventId Int @unique } model Link { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid link String campaign Campaign @relation(fields: [campaignId], references: [id], onDelete: Cascade) campaignId Int group Group @relation(fields: [groupId], references: [id], onDelete: Cascade) groupId Int @unique } 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 roles Role[] @relation(name: "participants") 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 gender Gender relevance Job group Group @relation(fields: [groupId], references: [id], onDelete: Cascade) groupId Int roles Role[] } model Role { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random")) 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 oragnisation Organisation @relation(fields: [oragnisationId], references: [id], onDelete: Cascade) oragnisationId Int participants Participant[] link Link? admins Admin[] } model Media { id Int @id @default(autoincrement()) pid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid description String location String @unique event Event[] discipline Discipline[] role RoleSchema[] } enum AdminLevel { STANDARD ELEVATED } enum Gender { MALE FEMALE OTHER } enum Job { TEAMLEADER MEMBER }