6ea31e8ac0
Senders no longer need to fill in two activities to publish; one is now enough (still capped at 5). Each activity can also specify a place, which flows into the generated Google Calendar link and .ics file when the recipient picks a slot.
66 lines
2.1 KiB
Plaintext
66 lines
2.1 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
binaryTargets = ["native", "linux-musl-openssl-3.0.x"]
|
|
}
|
|
|
|
datasource db {
|
|
provider = "sqlite"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model Proposal {
|
|
id String @id @default(cuid())
|
|
slug String @unique
|
|
manageToken String @unique
|
|
senderName String
|
|
recipientName String
|
|
title String
|
|
message String
|
|
theme String @default("sunset")
|
|
gradientFrom String?
|
|
gradientVia String?
|
|
gradientTo String?
|
|
gifUrl String?
|
|
evasiveNo Boolean @default(false)
|
|
status String @default("draft")
|
|
expiresAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
activities ActivityOption[]
|
|
response Response?
|
|
}
|
|
|
|
model ActivityOption {
|
|
id String @id @default(cuid())
|
|
proposalId String
|
|
proposal Proposal @relation(fields: [proposalId], references: [id], onDelete: Cascade)
|
|
title String
|
|
description String?
|
|
location String?
|
|
emoji String @default("🎉")
|
|
order Int @default(0)
|
|
slots TimeSlot[]
|
|
responses Response[] @relation("SelectedActivity")
|
|
}
|
|
|
|
model TimeSlot {
|
|
id String @id @default(cuid())
|
|
activityOptionId String
|
|
activity ActivityOption @relation(fields: [activityOptionId], references: [id], onDelete: Cascade)
|
|
label String
|
|
startsAt String?
|
|
responses Response[] @relation("SelectedSlot")
|
|
}
|
|
|
|
model Response {
|
|
id String @id @default(cuid())
|
|
proposalId String @unique
|
|
proposal Proposal @relation(fields: [proposalId], references: [id], onDelete: Cascade)
|
|
selectedActivityId String?
|
|
selectedActivity ActivityOption? @relation("SelectedActivity", fields: [selectedActivityId], references: [id])
|
|
selectedTimeSlotId String?
|
|
selectedTimeSlot TimeSlot? @relation("SelectedSlot", fields: [selectedTimeSlotId], references: [id])
|
|
answer String
|
|
note String?
|
|
respondedAt DateTime @default(now())
|
|
}
|