is207-be / sql /init.sql
ThangNguyen27's picture
first commit
a6bf405
-- ===============================
-- ACCOUNT & CUSTOMER
-- ===============================
CREATE TABLE IF NOT EXISTS account (
account_id SERIAL PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
status VARCHAR(20) DEFAULT 'ACTIVE',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOLEAN DEFAULT FALSE
);
CREATE TABLE IF NOT EXISTS customer (
id SERIAL PRIMARY KEY,
account_id INT,
fullname VARCHAR(100),
email VARCHAR(150) UNIQUE,
phone_number VARCHAR(10),
id_number VARCHAR(15),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOLEAN DEFAULT FALSE
);
CREATE TABLE IF NOT EXISTS role (
id SERIAL PRIMARY KEY,
title VARCHAR(100)
);
CREATE TABLE IF NOT EXISTS account_token (
token_id SERIAL PRIMARY KEY,
account_id INT,
token_value VARCHAR(500) NOT NULL,
expires_at TIMESTAMP,
issued_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_revoked BOOLEAN DEFAULT FALSE
);
CREATE TABLE IF NOT EXISTS account_assign_role (
account_id INT,
role_id INT,
PRIMARY KEY (account_id, role_id)
);
-- ===============================
-- PARTNER & WITHDRAW
-- ===============================
CREATE TABLE IF NOT EXISTS partner (
id SERIAL PRIMARY KEY,
account_id INT,
name VARCHAR(100),
phone_number VARCHAR(10),
address VARCHAR(255),
banking_number VARCHAR(20),
bank VARCHAR(255),
balance NUMERIC(12,2) DEFAULT 0
);
CREATE TABLE IF NOT EXISTS withdraw (
id SERIAL PRIMARY KEY,
partner_id INT,
transaction_amount NUMERIC(12,2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
finished_at TIMESTAMP,
status VARCHAR(255)
);
-- ===============================
-- LOCATION TABLES
-- ===============================
CREATE TABLE IF NOT EXISTS city (
id SERIAL PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS ward (
id SERIAL PRIMARY KEY,
city_id INT,
name VARCHAR(255)
);
-- ===============================
-- RESORT & FEEDBACK
-- ===============================
CREATE TABLE IF NOT EXISTS resort (
id SERIAL PRIMARY KEY,
partner_id INT,
name VARCHAR(255),
address VARCHAR(255),
ward_id INT,
img_360_url VARCHAR(255),
rating INT DEFAULT 0
);
CREATE TABLE IF NOT EXISTS resort_images (
id SERIAL PRIMARY KEY,
resort_id INT,
url VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS feedback (
id SERIAL PRIMARY KEY,
resort_id INT,
customer_id INT,
rating INT NOT NULL CHECK (rating BETWEEN 1 AND 5),
comment TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- ===============================
-- ROOM & ROOM TYPE
-- ===============================
CREATE TABLE IF NOT EXISTS room_type (
id SERIAL PRIMARY KEY,
resort_id INT,
name VARCHAR(255),
area FLOAT,
quantity_standard VARCHAR(255),
quality_standard VARCHAR(255),
bed_amount INT,
people_amount INT,
price NUMERIC(12,2)
);
CREATE TABLE IF NOT EXISTS room_images (
id SERIAL PRIMARY KEY,
room_type_id INT,
url VARCHAR(255),
is_deleted BOOLEAN DEFAULT FALSE
);
CREATE TABLE IF NOT EXISTS room (
id SERIAL PRIMARY KEY,
room_type_id INT,
number INT,
status VARCHAR(255),
UNIQUE (room_type_id, number)
);
CREATE TABLE IF NOT EXISTS booking_timeslot (
room_id INT,
started_time TIMESTAMP,
finished_time TIMESTAMP,
invoice_id INT,
PRIMARY KEY (room_id, started_time)
);
-- ===============================
-- SERVICE & OFFER
-- ===============================
CREATE TABLE IF NOT EXISTS service (
id SERIAL PRIMARY KEY,
name VARCHAR(255),
resort_id INT
);
CREATE TABLE IF NOT EXISTS offer (
id SERIAL PRIMARY KEY,
room_type_id INT,
cost NUMERIC(12,2)
);
CREATE TABLE IF NOT EXISTS service_offered (
id SERIAL PRIMARY KEY,
offer_id INT
);
-- ===============================
-- BOOKING & INVOICE
-- ===============================
CREATE TABLE IF NOT EXISTS booking (
id SERIAL PRIMARY KEY,
customer_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(255),
cost NUMERIC(12,2)
);
CREATE TABLE IF NOT EXISTS booking_detail (
id SERIAL PRIMARY KEY,
booking_id INT,
offer_id INT,
number_of_rooms INT,
cost NUMERIC(12,2),
started_at TIMESTAMP,
finished_at TIMESTAMP,
status VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS invoice (
id SERIAL PRIMARY KEY,
customer_id INT,
partner_id INT,
booking_detail_id INT,
cost NUMERIC(12,2),
finished_time TIMESTAMP,
payment_method VARCHAR(255)
);