Files
kefu/im/backend/migrations/005_membership.sql
T
2026-08-27 14:04:28 +08:00

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;