81 lines
3.2 KiB
SQL
81 lines
3.2 KiB
SQL
CREATE TABLE IF NOT EXISTS membership_plans (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
code VARCHAR(30) NOT NULL,
|
|
name VARCHAR(50) NOT NULL,
|
|
level TINYINT UNSIGNED NOT NULL,
|
|
duration_days INT UNSIGNED NOT NULL,
|
|
price_cent INT UNSIGNED NOT NULL,
|
|
original_price_cent INT UNSIGNED NOT NULL,
|
|
status TINYINT UNSIGNED NOT NULL DEFAULT 1,
|
|
sort_order INT NOT NULL DEFAULT 0,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_plan_code (code)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS benefit_definitions (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
benefit_key VARCHAR(50) NOT NULL,
|
|
name VARCHAR(100) NOT NULL,
|
|
value_type VARCHAR(20) NOT NULL,
|
|
description VARCHAR(255) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_benefit_key (benefit_key)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS plan_benefits (
|
|
plan_id BIGINT UNSIGNED NOT NULL,
|
|
benefit_id BIGINT UNSIGNED NOT NULL,
|
|
benefit_value VARCHAR(255) NOT NULL,
|
|
PRIMARY KEY (plan_id, benefit_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS subscriptions (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
plan_id BIGINT UNSIGNED NOT NULL,
|
|
source VARCHAR(30) NOT NULL,
|
|
status TINYINT UNSIGNED NOT NULL DEFAULT 1,
|
|
started_at DATETIME(3) NOT NULL,
|
|
expires_at DATETIME(3) NOT NULL,
|
|
auto_renew TINYINT(1) NOT NULL DEFAULT 0,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id),
|
|
KEY idx_sub_user_expire (user_id, expires_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS user_entitlements (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
benefit_key VARCHAR(50) NOT NULL,
|
|
benefit_value VARCHAR(255) NOT NULL,
|
|
source_type VARCHAR(30) NOT NULL,
|
|
source_id BIGINT UNSIGNED NOT NULL,
|
|
started_at DATETIME(3) NOT NULL,
|
|
expires_at DATETIME(3) NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id),
|
|
KEY idx_entitlement_user_key (user_id, benefit_key, expires_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS orders (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
order_no VARCHAR(40) NOT NULL,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
product_type VARCHAR(30) NOT NULL,
|
|
product_id BIGINT UNSIGNED NOT NULL,
|
|
amount_cent INT UNSIGNED NOT NULL,
|
|
currency CHAR(3) NOT NULL DEFAULT 'CNY',
|
|
status VARCHAR(20) NOT NULL DEFAULT 'CREATED',
|
|
channel VARCHAR(30) NOT NULL DEFAULT '',
|
|
paid_at DATETIME(3) NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_order_no (order_no),
|
|
KEY idx_order_user_created (user_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|