197 lines
4.8 KiB
Plaintext
197 lines
4.8 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model User {
|
|
id Int @id @default(autoincrement())
|
|
email String @unique
|
|
name String
|
|
role UserRole
|
|
|
|
emailConfirmedAt DateTime? @db.Timestamptz(3)
|
|
|
|
loginLinks UserLoginLinks[]
|
|
|
|
deactivated Boolean @default(false)
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
|
updatedAt DateTime @updatedAt @db.Timestamptz(3)
|
|
deletedAt DateTime? @db.Timestamptz(3)
|
|
|
|
huntsCreated Hunt[]
|
|
huntsMember HuntMember[]
|
|
|
|
teamsOwner HuntTeam[]
|
|
teamsMember TeamMember[]
|
|
answers QuestAnswer[] @relation("AnswerMember")
|
|
reviews QuestAnswer[] @relation("AnswerReview")
|
|
}
|
|
|
|
enum UserRole {
|
|
USER
|
|
CREATOR
|
|
ADMIN
|
|
}
|
|
|
|
model UserLoginLinks {
|
|
id Int @id @default(autoincrement())
|
|
|
|
secret String
|
|
used Boolean @default(false)
|
|
|
|
user User @relation(fields: [userId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
userId Int
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
|
}
|
|
|
|
model Hunt {
|
|
id Int @id @default(autoincrement())
|
|
name String
|
|
description String
|
|
|
|
virtual Boolean @default(false)
|
|
start DateTime? @db.Timestamptz(3)
|
|
end DateTime? @db.Timestamptz(3)
|
|
allowJoin Boolean @default(false)
|
|
revealPictures Boolean @default(false)
|
|
revealAnswers Boolean @default(false)
|
|
|
|
creator User @relation(fields: [creatorId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
creatorId Int
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
|
updatedAt DateTime @updatedAt @db.Timestamptz(3)
|
|
deletedAt DateTime? @db.Timestamptz(3)
|
|
|
|
teams HuntTeam[]
|
|
members HuntMember[]
|
|
|
|
quests HuntQuest[]
|
|
|
|
@@index([creatorId])
|
|
}
|
|
|
|
model HuntMember {
|
|
hunt Hunt @relation(fields: [huntId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
huntId Int
|
|
|
|
member User @relation(fields: [memberId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
memberId Int
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
|
|
|
@@unique([memberId, huntId])
|
|
@@index([memberId, huntId])
|
|
@@index([memberId])
|
|
@@index([huntId])
|
|
}
|
|
|
|
model HuntTeam {
|
|
id Int @id @default(autoincrement())
|
|
name String
|
|
description String @default("")
|
|
password String @default("")
|
|
|
|
hunt Hunt @relation(fields: [huntId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
huntId Int
|
|
|
|
owner User @relation(fields: [ownerId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
ownerId Int
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
|
|
|
members TeamMember[]
|
|
answers QuestAnswer[]
|
|
|
|
@@index([ownerId])
|
|
@@index([huntId])
|
|
}
|
|
|
|
model TeamMember {
|
|
team HuntTeam @relation(fields: [teamId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
teamId Int
|
|
|
|
member User @relation(fields: [memberId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
memberId Int
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
|
|
|
@@unique([memberId, teamId])
|
|
@@index([teamId])
|
|
@@index([memberId])
|
|
@@index([memberId, teamId])
|
|
}
|
|
|
|
enum TextType {
|
|
TEXT
|
|
WORD
|
|
NUMBER
|
|
INTEGER
|
|
}
|
|
|
|
model HuntQuest {
|
|
id Int @id @default(autoincrement())
|
|
title String
|
|
description String @default("")
|
|
question String?
|
|
image String?
|
|
location String?
|
|
locationLink String?
|
|
|
|
order Int @default(0)
|
|
optional Boolean @default(true)
|
|
pictureRequired Boolean @default(false)
|
|
textRequired Boolean @default(false)
|
|
textType TextType @default(TEXT)
|
|
textUnit String?
|
|
textSolution String?
|
|
|
|
points Int @default(10) @db.SmallInt
|
|
extraPoints Int? @db.SmallInt
|
|
extraText String?
|
|
|
|
hunt Hunt @relation(fields: [huntId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
huntId Int
|
|
|
|
answers QuestAnswer[]
|
|
|
|
@@index([huntId])
|
|
}
|
|
|
|
model QuestAnswer {
|
|
id Int @id @default(autoincrement())
|
|
text String?
|
|
picture String?
|
|
location String?
|
|
lat Decimal? @db.Decimal(10, 8)
|
|
lon Decimal? @db.Decimal(10, 8)
|
|
|
|
team HuntTeam @relation(fields: [teamId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
teamId Int
|
|
|
|
member User @relation("AnswerMember", fields: [memberId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
memberId Int
|
|
|
|
quest HuntQuest @relation(fields: [questId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
questId Int
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
|
updatedAt DateTime @updatedAt @db.Timestamptz(3)
|
|
|
|
reviewer User? @relation("AnswerReview", fields: [reviewerId], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
reviewerId Int?
|
|
|
|
score Int? @db.SmallInt
|
|
review String?
|
|
|
|
@@index([teamId])
|
|
@@index([memberId])
|
|
@@index([questId])
|
|
}
|