227 lines
6.3 KiB
Plaintext
227 lines
6.3 KiB
Plaintext
// This is your Prisma schema file,
|
|
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
|
|
// https://github.com/prisma/prisma-client-js/issues/616#issuecomment-616107821
|
|
binaryTargets = ["native", "darwin", "debian-openssl-1.1.x"]
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model User {
|
|
id Int @id @default(autoincrement())
|
|
email String? @unique
|
|
username String? @unique
|
|
password String?
|
|
phone String? @unique
|
|
fullname String?
|
|
dob DateTime?
|
|
gender Gender @default(Female)
|
|
bookings Booking[]
|
|
language Language @default(vi)
|
|
Slots Slot[]
|
|
Comments Comment[]
|
|
created_at DateTime @default(now()) @db.Timestamptz(3)
|
|
updated_at DateTime @updatedAt @db.Timestamptz(3)
|
|
deleted_at DateTime? @db.Timestamptz(3)
|
|
Like Like[]
|
|
Vote Vote[]
|
|
|
|
@@index([id, email])
|
|
}
|
|
|
|
model Booking {
|
|
id Int @id @default(autoincrement())
|
|
path String?
|
|
image String?
|
|
public Boolean @default(true)
|
|
user User @relation(fields: [user_id], references: [id], onUpdate: Cascade, onDelete: Cascade)
|
|
user_id Int
|
|
status BookingStatus @default(pending)
|
|
slot Slot @relation(fields: [slot_id], references: [id])
|
|
slot_id Int
|
|
start_at DateTime @db.Timestamptz(3)
|
|
end_at DateTime @db.Timestamptz(3)
|
|
owner String
|
|
license_plates String
|
|
contact String
|
|
pricing Int?
|
|
booking_type BookingType? @default(All)
|
|
slot_type SlotType? @default(Car)
|
|
created_at DateTime @default(now()) @db.Timestamptz(3)
|
|
updated_at DateTime @updatedAt @db.Timestamptz(3)
|
|
deleted_at DateTime? @db.Timestamptz(3)
|
|
|
|
@@index([user_id, id])
|
|
}
|
|
|
|
model Slot {
|
|
id Int @id @default(autoincrement())
|
|
name String
|
|
lat Float
|
|
lng Float
|
|
images String[] @default([])
|
|
address String
|
|
district String
|
|
ward String
|
|
city String
|
|
destination String?
|
|
phone String?
|
|
total Int
|
|
empty Int
|
|
published Boolean @default(false)
|
|
tenant Tenant? @relation(fields: [tenantId], references: [id])
|
|
tenantId Int?
|
|
user User? @relation(fields: [userId], references: [id])
|
|
userId Int?
|
|
distance Float?
|
|
duration Float?
|
|
directions Json?
|
|
slot_type SlotType? @default(Car)
|
|
alow_booking_type BookingType? @default(All)
|
|
open String? @db.VarChar(5)
|
|
close String? @db.VarChar(5)
|
|
created_at DateTime @default(now()) @db.Timestamptz(3)
|
|
updated_at DateTime @updatedAt @db.Timestamptz(3)
|
|
deleted_at DateTime? @db.Timestamptz(3)
|
|
pricing_per_hour Int @default(0)
|
|
Bookings Booking[]
|
|
Comments Comment[]
|
|
Vote Vote[]
|
|
|
|
@@index([id])
|
|
}
|
|
|
|
model Admin {
|
|
id Int @id @default(autoincrement())
|
|
username String @unique
|
|
password String
|
|
password_confirmation String?
|
|
street String?
|
|
city String?
|
|
province String?
|
|
first_name String
|
|
last_name String
|
|
phone String
|
|
dob DateTime?
|
|
language Language @default(vi)
|
|
last_login_at DateTime?
|
|
current_login_at DateTime?
|
|
last_login_failed_at DateTime?
|
|
consecutive_login_penalty Int @default(0)
|
|
avatarUrl String?
|
|
active Boolean @default(true)
|
|
last_lockout_at DateTime?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model Tenant {
|
|
id Int @id @default(autoincrement())
|
|
email String? @unique
|
|
username String @unique
|
|
password String
|
|
password_confirmation String?
|
|
street String?
|
|
city String?
|
|
province String?
|
|
postal_code String?
|
|
first_name String
|
|
last_name String
|
|
phone String
|
|
language Language @default(vi)
|
|
last_login_at DateTime?
|
|
current_login_at DateTime?
|
|
last_login_failed_at DateTime?
|
|
consecutive_login_penalty Int @default(0)
|
|
avatarUrl String?
|
|
active Boolean @default(true)
|
|
last_lockout_at DateTime?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
Slots Slot[]
|
|
Comments Comment[]
|
|
}
|
|
|
|
model File {
|
|
id Int @id @default(autoincrement())
|
|
path String
|
|
slot_id Int?
|
|
user_id Int?
|
|
size Int
|
|
mine_type String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
deletedAt DateTime?
|
|
}
|
|
|
|
model History {
|
|
id Int @id @default(autoincrement())
|
|
}
|
|
|
|
model Comment {
|
|
id Int @id @default(autoincrement())
|
|
slot_id Int
|
|
content String?
|
|
tenant Tenant? @relation(fields: [tenantId], references: [id])
|
|
tenantId Int?
|
|
user User? @relation(fields: [userId], references: [id])
|
|
userId Int?
|
|
slot Slot @relation(fields: [slot_id], references: [id])
|
|
likes Like[]
|
|
}
|
|
|
|
model Like {
|
|
id Int @id @default(autoincrement())
|
|
Comment Comment @relation(fields: [commentId], references: [id])
|
|
commentId Int
|
|
user User? @relation(fields: [userId], references: [id])
|
|
userId Int?
|
|
}
|
|
|
|
model Vote {
|
|
id Int @id @default(autoincrement())
|
|
slot Slot @relation(fields: [slot_id], references: [id])
|
|
slot_id Int
|
|
user User? @relation(fields: [userId], references: [id])
|
|
userId Int?
|
|
source Int @default(0)
|
|
type Int @default(0)
|
|
}
|
|
|
|
enum Language {
|
|
vi
|
|
en
|
|
}
|
|
|
|
enum Gender {
|
|
Male
|
|
Female
|
|
LGBT
|
|
}
|
|
|
|
enum BookingStatus {
|
|
done
|
|
pending
|
|
reject
|
|
cancel
|
|
out
|
|
}
|
|
|
|
enum SlotType {
|
|
Car
|
|
Mortorbike
|
|
Orther
|
|
}
|
|
|
|
enum BookingType {
|
|
Fulltime
|
|
Parttime
|
|
All
|
|
}
|