shubraVeil/admin/config/setup.sql

231 lines
7.0 KiB
MySQL
Raw Normal View History

2024-12-25 13:05:50 +02:00
-- 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)
);