diff --git a/prisma/schema.prisma b/prisma/schema.prisma index e65ae5b..8025cd4 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,158 +1,170 @@ -// 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[] -} - -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]) - 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]) - 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 @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]) - eventId Int -} - -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]) - disciplineId Int -} - -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]) - 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 - - verified Boolean @default(false) - - group Group @relation(fields: [groupId], references: [id]) - groupId Int - roles Role[] -} - -model Role { - id Int @id @default(autoincrement()) - pid String @unique @default(dbgenerated("gen_random")) - name String //e.g. runner, swimmer,... - importance Job - score String - - participant Participant? @relation(fields: [participantId], references: [id]) - participantId Int? - team Team @relation(name: "participants", fields: [teamId], references: [id]) - teamId Int - schema RoleSchema @relation(fields: [schemaId], references: [id]) - 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]) - 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]) - oragnisationId Int - participants Participant[] - link Link? - admins Admin[] -} - -enum AdminLevel { - STANDARD - ELEVATED -} - -enum Gender { - MALE - FEMALE - OTHER -} - -enum Job { - TEAMLEADER - MEMBER +// 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_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 + + 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 +}