231 lines
7.0 KiB
SQL
231 lines
7.0 KiB
SQL
-- Users table
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|
email VARCHAR(100) UNIQUE NOT NULL,
|
|
password VARCHAR(255) NOT NULL,
|
|
full_name VARCHAR(100),
|
|
phone VARCHAR(20),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
role ENUM('user', 'admin') DEFAULT 'user'
|
|
);
|
|
|
|
-- Addresses table
|
|
CREATE TABLE IF NOT EXISTS addresses (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
user_id INT,
|
|
address_line1 VARCHAR(255) NOT NULL,
|
|
address_line2 VARCHAR(255),
|
|
city VARCHAR(100) NOT NULL,
|
|
state VARCHAR(100),
|
|
postal_code VARCHAR(20),
|
|
is_default BOOLEAN DEFAULT FALSE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Categories table
|
|
CREATE TABLE IF NOT EXISTS categories (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
name VARCHAR(100) NOT NULL,
|
|
name_ar VARCHAR(100) NOT NULL,
|
|
description TEXT,
|
|
description_ar TEXT,
|
|
parent_id INT,
|
|
image_url VARCHAR(255),
|
|
FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE SET NULL
|
|
);
|
|
|
|
-- Products table
|
|
CREATE TABLE IF NOT EXISTS products (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
category_id INT,
|
|
name VARCHAR(255) NOT NULL,
|
|
name_ar VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
description_ar TEXT,
|
|
price DECIMAL(10,2) NOT NULL,
|
|
sale_price DECIMAL(10,2),
|
|
stock_quantity INT DEFAULT 0,
|
|
sku VARCHAR(50) UNIQUE,
|
|
weight DECIMAL(10,2),
|
|
benefits TEXT,
|
|
benefits_ar TEXT,
|
|
ingredients TEXT,
|
|
ingredients_ar TEXT,
|
|
usage_instructions TEXT,
|
|
usage_instructions_ar TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (category_id) REFERENCES categories(id)
|
|
);
|
|
|
|
-- Product Images table
|
|
CREATE TABLE IF NOT EXISTS product_images (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
product_id INT,
|
|
image_url VARCHAR(255) NOT NULL,
|
|
is_primary BOOLEAN DEFAULT FALSE,
|
|
sort_order INT DEFAULT 0,
|
|
FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Reviews table
|
|
CREATE TABLE IF NOT EXISTS reviews (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
product_id INT,
|
|
user_id INT,
|
|
rating INT NOT NULL CHECK (rating BETWEEN 1 AND 5),
|
|
comment TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
is_verified BOOLEAN DEFAULT FALSE,
|
|
FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
|
);
|
|
|
|
-- Shopping Cart table
|
|
CREATE TABLE IF NOT EXISTS shopping_cart (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
user_id INT,
|
|
product_id INT,
|
|
quantity INT DEFAULT 1,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (product_id) REFERENCES products(id)
|
|
);
|
|
|
|
-- Wishlist table
|
|
CREATE TABLE IF NOT EXISTS wishlist (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
user_id INT,
|
|
product_id INT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (product_id) REFERENCES products(id)
|
|
);
|
|
|
|
-- Orders table
|
|
CREATE TABLE IF NOT EXISTS orders (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
user_id INT,
|
|
status ENUM('pending', 'processing', 'shipped', 'delivered', 'cancelled') DEFAULT 'pending',
|
|
total_amount DECIMAL(10,2) NOT NULL,
|
|
shipping_address_id INT,
|
|
payment_method VARCHAR(50),
|
|
payment_status ENUM('pending', 'paid', 'failed') DEFAULT 'pending',
|
|
shipping_method VARCHAR(50),
|
|
shipping_cost DECIMAL(10,2) DEFAULT 0,
|
|
discount_amount DECIMAL(10,2) DEFAULT 0,
|
|
coupon_code VARCHAR(50),
|
|
notes TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id),
|
|
FOREIGN KEY (shipping_address_id) REFERENCES addresses(id)
|
|
);
|
|
|
|
-- Order Items table
|
|
CREATE TABLE IF NOT EXISTS order_items (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
order_id INT,
|
|
product_id INT,
|
|
quantity INT NOT NULL,
|
|
price DECIMAL(10,2) NOT NULL,
|
|
FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (product_id) REFERENCES products(id)
|
|
);
|
|
|
|
-- Coupons table
|
|
CREATE TABLE IF NOT EXISTS coupons (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
code VARCHAR(50) UNIQUE NOT NULL,
|
|
type ENUM('percentage', 'fixed') NOT NULL,
|
|
value DECIMAL(10,2) NOT NULL,
|
|
min_purchase DECIMAL(10,2),
|
|
max_discount DECIMAL(10,2),
|
|
start_date TIMESTAMP,
|
|
end_date TIMESTAMP,
|
|
usage_limit INT,
|
|
used_count INT DEFAULT 0,
|
|
is_active BOOLEAN DEFAULT TRUE
|
|
);
|
|
|
|
-- Blog Posts table
|
|
CREATE TABLE IF NOT EXISTS blog_posts (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
title VARCHAR(255) NOT NULL,
|
|
title_ar VARCHAR(255) NOT NULL,
|
|
content TEXT NOT NULL,
|
|
content_ar TEXT NOT NULL,
|
|
author_id INT,
|
|
featured_image VARCHAR(255),
|
|
status ENUM('draft', 'published') DEFAULT 'draft',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
published_at TIMESTAMP,
|
|
FOREIGN KEY (author_id) REFERENCES users(id)
|
|
);
|
|
|
|
-- Newsletter Subscribers table
|
|
CREATE TABLE IF NOT EXISTS newsletter_subscribers (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
email VARCHAR(100) UNIQUE NOT NULL,
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
subscribed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Chat Messages table
|
|
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
user_id INT,
|
|
admin_id INT,
|
|
message TEXT NOT NULL,
|
|
is_admin BOOLEAN DEFAULT FALSE,
|
|
is_read BOOLEAN DEFAULT FALSE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (admin_id) REFERENCES users(id)
|
|
);
|
|
|
|
-- FAQ Categories table
|
|
CREATE TABLE IF NOT EXISTS faq_categories (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
name VARCHAR(100) NOT NULL,
|
|
name_ar VARCHAR(100) NOT NULL,
|
|
sort_order INT DEFAULT 0
|
|
);
|
|
|
|
-- FAQs table
|
|
CREATE TABLE IF NOT EXISTS faqs (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
category_id INT,
|
|
question VARCHAR(255) NOT NULL,
|
|
question_ar VARCHAR(255) NOT NULL,
|
|
answer TEXT NOT NULL,
|
|
answer_ar TEXT NOT NULL,
|
|
sort_order INT DEFAULT 0,
|
|
FOREIGN KEY (category_id) REFERENCES faq_categories(id)
|
|
);
|
|
|
|
-- User Points table
|
|
CREATE TABLE IF NOT EXISTS user_points (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
user_id INT,
|
|
points INT DEFAULT 0,
|
|
earned_from VARCHAR(50),
|
|
earned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
expires_at TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Referral System table
|
|
CREATE TABLE IF NOT EXISTS referrals (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
referrer_id INT,
|
|
referred_id INT,
|
|
status ENUM('pending', 'completed') DEFAULT 'pending',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
completed_at TIMESTAMP,
|
|
FOREIGN KEY (referrer_id) REFERENCES users(id),
|
|
FOREIGN KEY (referred_id) REFERENCES users(id)
|
|
);
|