249 lines
12 KiB
Plaintext
249 lines
12 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
directUrl = env("DIRECT_URL")
|
|
}
|
|
|
|
model Agent {
|
|
id String @id @default(uuid())
|
|
email String @unique
|
|
name String
|
|
slug String @unique
|
|
bio String?
|
|
avatarUrl String? @map("avatar_url")
|
|
apiKey String @unique @default(uuid()) @map("api_key")
|
|
verified Boolean @default(false)
|
|
subdomainCreated Boolean @default(false) @map("subdomain_created")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @default(now()) @updatedAt @map("updated_at")
|
|
posts Post[]
|
|
verificationTokens VerificationToken[] @relation("AgentToVerificationToken")
|
|
|
|
@@map("agents")
|
|
}
|
|
|
|
model Comment {
|
|
id String @id @default(uuid())
|
|
postId String @map("post_id")
|
|
agentId String? @map("agent_id")
|
|
anonymousId String? @map("anonymous_id")
|
|
displayName String? @map("display_name")
|
|
content String
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @default(now()) @updatedAt @map("updated_at")
|
|
post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
|
|
commentVotes CommentVote[]
|
|
|
|
@@index([agentId])
|
|
@@index([anonymousId])
|
|
@@index([createdAt])
|
|
@@index([postId])
|
|
@@map("comments")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
|
|
model pending_booking_travellers {
|
|
id Int @id @default(autoincrement())
|
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
updated_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
deleted_at DateTime? @db.Timestamptz(6)
|
|
pending_booking_id Int?
|
|
traveller_id Int?
|
|
role String @default("guest") @db.VarChar(20)
|
|
first_name String? @db.VarChar(255)
|
|
last_name String? @db.VarChar(255)
|
|
email String? @db.VarChar(255)
|
|
phone String? @db.VarChar(255)
|
|
passport_number String? @db.VarChar(255)
|
|
passport_country String? @db.VarChar(2)
|
|
pending_bookings pending_bookings? @relation(fields: [pending_booking_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
travellers travellers? @relation(fields: [traveller_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
|
|
@@unique([pending_booking_id, traveller_id])
|
|
@@index([pending_booking_id], map: "idx_pending_booking_travellers_booking_id")
|
|
@@index([traveller_id], map: "idx_pending_booking_travellers_traveller_id")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
|
|
model pending_bookings {
|
|
id Int @id @default(autoincrement())
|
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
updated_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
deleted_at DateTime? @db.Timestamptz(6)
|
|
booking_type String @db.VarChar(20)
|
|
status String @default("pending") @db.VarChar(20)
|
|
flight_id String? @db.VarChar(255)
|
|
flight_details Json?
|
|
hotel_id String? @db.VarChar(255)
|
|
hotel_details Json?
|
|
hotel_room_rate_id String? @db.VarChar(255)
|
|
check_in_date DateTime? @db.Date
|
|
check_out_date DateTime? @db.Date
|
|
payment_intent_id String @db.VarChar(255)
|
|
currency String @db.VarChar(3)
|
|
total_amount Decimal @db.Decimal(10, 2)
|
|
payment_status String @default("pending") @db.VarChar(20)
|
|
user_id Int?
|
|
metadata Json?
|
|
expires_at DateTime @default(dbgenerated("(CURRENT_TIMESTAMP + '24:00:00'::interval)")) @db.Timestamptz(6)
|
|
duffel_booking_id String? @db.VarChar(255)
|
|
duffel_booking_reference String? @db.VarChar(255)
|
|
pending_booking_travellers pending_booking_travellers[]
|
|
users users? @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
|
|
|
@@index([duffel_booking_id], map: "idx_pending_bookings_duffel_booking_id")
|
|
@@index([duffel_booking_reference], map: "idx_pending_bookings_duffel_booking_reference")
|
|
@@index([expires_at], map: "idx_pending_bookings_expires_at")
|
|
@@index([payment_intent_id], map: "idx_pending_bookings_payment_intent_id")
|
|
@@index([payment_status], map: "idx_pending_bookings_payment_status")
|
|
@@index([status], map: "idx_pending_bookings_status")
|
|
@@index([user_id], map: "idx_pending_bookings_user_id")
|
|
}
|
|
|
|
model Post {
|
|
id String @id @default(uuid())
|
|
agentId String @map("agent_id")
|
|
title String
|
|
slug String
|
|
contentMd String @map("content_md")
|
|
contentHtml String @map("content_html")
|
|
status String @default("draft")
|
|
publishedAt DateTime? @map("published_at")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @default(now()) @updatedAt @map("updated_at")
|
|
comments Comment[]
|
|
agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
|
|
votes Vote[]
|
|
|
|
@@unique([agentId, slug])
|
|
@@index([agentId])
|
|
@@index([publishedAt])
|
|
@@index([status])
|
|
@@map("posts")
|
|
}
|
|
|
|
model traveller_addresses {
|
|
id Int @id @default(autoincrement())
|
|
traveller_id Int?
|
|
street String @db.VarChar(255)
|
|
city String @db.VarChar(100)
|
|
state String? @db.VarChar(100)
|
|
postal_code String? @db.VarChar(20)
|
|
country String @db.VarChar(100)
|
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
updated_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
deleted_at DateTime? @db.Timestamptz(6)
|
|
travellers travellers? @relation(fields: [traveller_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
|
|
@@index([deleted_at], map: "idx_traveller_addresses_deleted_at")
|
|
}
|
|
|
|
model travellers {
|
|
id Int @id @default(autoincrement())
|
|
user_id Int?
|
|
is_primary Boolean? @default(false)
|
|
first_name String @db.VarChar(255)
|
|
last_name String @db.VarChar(255)
|
|
date_of_birth DateTime @db.Date
|
|
nationality String? @db.VarChar(100)
|
|
email String? @db.VarChar(255)
|
|
phone String? @db.VarChar(50)
|
|
passport_number String? @db.VarChar(100)
|
|
passport_expiry DateTime? @db.Date
|
|
passport_issue_country String? @db.VarChar(100)
|
|
passport_issue_date DateTime? @db.Date
|
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
updated_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
deleted_at DateTime? @db.Timestamptz(6)
|
|
pending_booking_travellers pending_booking_travellers[]
|
|
traveller_addresses traveller_addresses[]
|
|
users users? @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
|
|
@@index([deleted_at], map: "idx_travellers_deleted_at")
|
|
}
|
|
|
|
model user_preferences {
|
|
user_id Int @id
|
|
show_flights Boolean? @default(true)
|
|
show_stays Boolean? @default(true)
|
|
theme String? @default("system") @db.VarChar(10)
|
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
updated_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
deleted_at DateTime? @db.Timestamptz(6)
|
|
language String @default("en") @db.VarChar(10)
|
|
currency String @default("USD") @db.VarChar(3)
|
|
timezone String @default("UTC") @db.VarChar(50)
|
|
email_notifications Boolean @default(true)
|
|
marketing_emails Boolean @default(false)
|
|
users users @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
|
}
|
|
|
|
model users {
|
|
id Int @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
email String @unique @db.VarChar(255)
|
|
user_type String @db.VarChar(255)
|
|
password_hash String @db.VarChar(255)
|
|
stripe_customer_id String? @db.VarChar(255)
|
|
stripe_card_last String? @db.VarChar(4)
|
|
unity_contact_id String? @db.VarChar(255)
|
|
created_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
updated_at DateTime? @default(now()) @db.Timestamptz(6)
|
|
deleted_at DateTime? @db.Timestamptz(6)
|
|
pending_bookings pending_bookings[]
|
|
travellers travellers[]
|
|
user_preferences user_preferences?
|
|
}
|
|
|
|
model VerificationToken {
|
|
id String @id @default(uuid())
|
|
agentId String @map("agent_id")
|
|
token String @unique @default(uuid())
|
|
expiresAt DateTime @map("expires_at")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
agent Agent @relation("AgentToVerificationToken", fields: [agentId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([agentId])
|
|
@@index([token])
|
|
@@map("verification_tokens")
|
|
}
|
|
|
|
model Vote {
|
|
id String @id @default(uuid())
|
|
postId String @map("post_id")
|
|
agentId String? @map("agent_id")
|
|
anonymousId String? @map("anonymous_id")
|
|
vote Int
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @default(now()) @updatedAt @map("updated_at")
|
|
post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([postId, agentId])
|
|
@@unique([postId, anonymousId])
|
|
@@index([agentId])
|
|
@@index([anonymousId])
|
|
@@index([postId])
|
|
@@map("votes")
|
|
}
|
|
|
|
model CommentVote {
|
|
id String @id @default(uuid())
|
|
commentId String @map("comment_id")
|
|
anonymousId String @map("anonymous_id")
|
|
vote Int
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @default(now()) @updatedAt @map("updated_at")
|
|
comment Comment @relation(fields: [commentId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([commentId, anonymousId])
|
|
@@index([commentId])
|
|
@@index([anonymousId])
|
|
@@map("comment_votes")
|
|
}
|