built out schema
This commit is contained in:
@@ -14,7 +14,295 @@ datasource db {
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
enum Role {
|
||||
COUPLE
|
||||
PLANNER
|
||||
}
|
||||
|
||||
enum RsvpStatus {
|
||||
PENDING
|
||||
ACCEPTED
|
||||
DECLINED
|
||||
}
|
||||
|
||||
enum VendorStatus {
|
||||
RESEARCHING
|
||||
CONTACTING
|
||||
RESPONDED
|
||||
PROPOSAL_RECEIVED
|
||||
NEGOTIATING
|
||||
CONTRACT_SENT
|
||||
CONTRACT_SIGNED
|
||||
DECLINED
|
||||
BACKUP
|
||||
}
|
||||
|
||||
enum FileKind {
|
||||
CONTRACT
|
||||
PROPOSAL
|
||||
OTHER
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
email String @unique
|
||||
id String @id @default(cuid())
|
||||
email String @unique
|
||||
name String
|
||||
username String @unique
|
||||
password String? // hashed pw, optional for OIDC
|
||||
authProvider String?
|
||||
providerId String?
|
||||
isAdmin Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
memberships Membership[]
|
||||
fileUploads FileUpload[]
|
||||
allowedOrigins AllowedOrigin[]
|
||||
|
||||
@@unique([authProvider, providerId])
|
||||
}
|
||||
|
||||
model Project {
|
||||
id String @id @default(cuid())
|
||||
name String @unique
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
archivedAt DateTime
|
||||
|
||||
memberships Membership[]
|
||||
invites InviteToken[]
|
||||
events Event[]
|
||||
households Household[]
|
||||
}
|
||||
|
||||
model Membership {
|
||||
id String @id @default(cuid())
|
||||
role Role
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
userId String
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
projectId String
|
||||
event Event? @relation(fields: [eventId], references: [id], onDelete: Cascade)
|
||||
eventId String?
|
||||
|
||||
@@index([userId])
|
||||
@@index([projectId])
|
||||
}
|
||||
|
||||
model InviteToken {
|
||||
id String @id @default(cuid())
|
||||
email String
|
||||
role Role
|
||||
token String @unique
|
||||
expiresAt DateTime
|
||||
acceptedAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
projectId String
|
||||
event Event? @relation(fields: [eventId], references: [id], onDelete: Cascade)
|
||||
eventId String?
|
||||
|
||||
@@index([email])
|
||||
}
|
||||
|
||||
model Event {
|
||||
id String @id @default(cuid())
|
||||
slug String @unique
|
||||
name String
|
||||
date DateTime?
|
||||
notes String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
projectId String
|
||||
|
||||
memberships Membership[]
|
||||
invites InviteToken[]
|
||||
todos EventTodo[]
|
||||
eventGuests EventGuest[]
|
||||
eventVendors EventVendor[]
|
||||
registryItems RegistryItem[]
|
||||
fileUploads FileUpload[]
|
||||
|
||||
@@index([projectId])
|
||||
}
|
||||
|
||||
model EventTodo {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
complete Boolean @default(false)
|
||||
dueDate DateTime?
|
||||
notes String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)
|
||||
eventId String
|
||||
|
||||
@@index([eventId])
|
||||
}
|
||||
|
||||
model Address {
|
||||
id String @id @default(cuid())
|
||||
line1 String
|
||||
line2 String?
|
||||
city String
|
||||
state String
|
||||
postalCode String
|
||||
country String @default("United States")
|
||||
|
||||
household Household?
|
||||
vendor Vendor?
|
||||
}
|
||||
|
||||
model Household {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
token String @unique @default(uuid())
|
||||
notes String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
projectId String
|
||||
address Address @relation(fields: [addressId], references: [id])
|
||||
addressId String @unique
|
||||
|
||||
guests Guest[]
|
||||
|
||||
@@index([projectId])
|
||||
}
|
||||
|
||||
model Guest {
|
||||
id String @id @default(cuid())
|
||||
firstName String
|
||||
lastName String?
|
||||
email String?
|
||||
phone String?
|
||||
notes String?
|
||||
side String?
|
||||
congratulated Boolean @default(false)
|
||||
isPlaceHolder Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
household Household @relation(fields: [householdId], references: [id], onDelete: Cascade)
|
||||
householdId String
|
||||
|
||||
eventGuest EventGuest[]
|
||||
|
||||
@@index([householdId])
|
||||
}
|
||||
|
||||
model EventGuest {
|
||||
id String @id @default(cuid())
|
||||
rsvp RsvpStatus @default(PENDING)
|
||||
respodedAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)
|
||||
eventId String
|
||||
guest Guest @relation(fields: [guestId], references: [id], onDelete: Cascade)
|
||||
guestId String
|
||||
|
||||
@@unique([eventId, guestId])
|
||||
@@index([guestId])
|
||||
}
|
||||
|
||||
model VendorCategory {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
description String?
|
||||
color String? @default("#3B82F6")
|
||||
|
||||
vendors Vendor[]
|
||||
}
|
||||
|
||||
model Vendor {
|
||||
id String @id @default(cuid())
|
||||
slug String @unique
|
||||
name String
|
||||
description String?
|
||||
website String?
|
||||
contactPerson String?
|
||||
email String?
|
||||
phone String?
|
||||
notes String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
category VendorCategory? @relation(fields: [categoryId], references: [id], onDelete: SetNull)
|
||||
categoryId String?
|
||||
address Address? @relation(fields: [addressId], references: [id])
|
||||
addressId String?
|
||||
|
||||
eventVendors EventVendor[]
|
||||
}
|
||||
|
||||
model EventVendor {
|
||||
id String @id @default(cuid())
|
||||
status VendorStatus @default(RESEARCHING)
|
||||
bookedDate DateTime?
|
||||
quotedPrice Decimal? @db.decimal(10, 2)
|
||||
finalCost Decimal? @db.decimal(10, 2)
|
||||
depositPaid Decimal? @db.decimal(10, 2)
|
||||
depositDueDate DateTime?
|
||||
finalPaymentDue DateTime?
|
||||
paymentNotes String?
|
||||
notes String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
event Event @relation(fields: [eventId], references: [id], onDelete: Cascade)
|
||||
eventId String
|
||||
vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Restrict)
|
||||
vendorId String
|
||||
|
||||
fileUploads FileUpload[]
|
||||
|
||||
@@unique([vendorId, eventId])
|
||||
@@index([vendorId])
|
||||
}
|
||||
|
||||
model FileUpload {
|
||||
id String @id @default(cuid())
|
||||
originalName String
|
||||
storageKey String @unique
|
||||
mimeType String
|
||||
size Int
|
||||
kind FileKind @default(OTHER)
|
||||
uploadedAt DateTime @default(now())
|
||||
|
||||
uploadedBy User @relation(fields: [uploadedById], references: [id])
|
||||
uploadedById String
|
||||
event Event? @relation(fields: [eventId], references: [id], onDelete: Cascade)
|
||||
eventId String?
|
||||
eventVendor Vendor? @relation(fields: [eventVendorId], references: [id], onDelete: Cascade)
|
||||
eventVendorId String?
|
||||
}
|
||||
|
||||
model RegistryItem {
|
||||
id String @id @default(cuid())
|
||||
slug String
|
||||
name String
|
||||
url String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
event Event? @relation(fields: [eventId], references: [id], onDelete: Cascade)
|
||||
eventId String?
|
||||
|
||||
@@unique([eventId, slug])
|
||||
}
|
||||
|
||||
model AllowedOrigin {
|
||||
id String @id @default(cuid())
|
||||
origin String @unique
|
||||
isDefault Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
addedBy User? @relation(fields: [addedById], references: [id], onDelete: SetNull)
|
||||
addedById String?
|
||||
}
|
||||
Reference in New Issue
Block a user