Initial commit: LACA parking management system

This commit is contained in:
2025-08-13 10:05:36 +07:00
commit 8b07467b61
275 changed files with 66828 additions and 0 deletions

View File

@@ -0,0 +1,226 @@
// 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
}