Files
kefu/im/backend/migrations/025_client_productization.sql
T
2026-09-03 08:38:17 +08:00

141 lines
6.7 KiB
SQL

SET NAMES utf8mb4;
ALTER TABLE user_privacy_settings
ADD COLUMN invisible_visit TINYINT(1) NOT NULL DEFAULT 0 AFTER allow_profile_visit_record;
ALTER TABLE membership_plans
ADD COLUMN daily_like_limit INT UNSIGNED NOT NULL DEFAULT 20 AFTER daily_active_chat_limit,
ADD COLUMN can_view_visitors TINYINT(1) NOT NULL DEFAULT 0 AFTER daily_like_limit,
ADD COLUMN can_invisible_visit TINYINT(1) NOT NULL DEFAULT 0 AFTER can_view_visitors,
ADD COLUMN recommendation_weight INT UNSIGNED NOT NULL DEFAULT 0 AFTER can_invisible_visit;
UPDATE membership_plans
SET daily_like_limit=CASE WHEN level>=2 THEN 0 WHEN level=1 THEN 100 ELSE 20 END,
can_view_visitors=IF(level>=1,1,0),
can_invisible_visit=IF(level>=1,1,0),
recommendation_weight=CASE WHEN level>=2 THEN 30 WHEN level=1 THEN 15 ELSE 0 END;
ALTER TABLE user_verifications
DROP PRIMARY KEY,
ADD PRIMARY KEY (user_id, verification_type);
CREATE TABLE IF NOT EXISTS user_daily_like_usage (
user_id BIGINT UNSIGNED NOT NULL,
usage_date DATE NOT NULL,
used_count INT UNSIGNED NOT NULL DEFAULT 0,
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (user_id, usage_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_daily_like_targets (
user_id BIGINT UNSIGNED NOT NULL,
target_type VARCHAR(20) NOT NULL,
target_id BIGINT UNSIGNED NOT NULL,
usage_date DATE NOT NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (user_id, target_type, target_id, usage_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_notification_settings (
user_id BIGINT UNSIGNED NOT NULL,
im_enabled TINYINT(1) NOT NULL DEFAULT 1,
interaction_enabled TINYINT(1) NOT NULL DEFAULT 1,
system_enabled TINYINT(1) NOT NULL DEFAULT 1,
sound_enabled TINYINT(1) NOT NULL DEFAULT 1,
vibration_enabled TINYINT(1) NOT NULL DEFAULT 1,
quiet_start VARCHAR(5) NOT NULL DEFAULT '',
quiet_end VARCHAR(5) NOT NULL DEFAULT '',
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 (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_push_tokens (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL,
device_id VARCHAR(100) NOT NULL,
provider VARCHAR(30) NOT NULL,
push_token VARCHAR(500) NOT NULL,
platform VARCHAR(20) NOT NULL DEFAULT '',
app_version VARCHAR(30) NOT NULL DEFAULT '',
status TINYINT UNSIGNED NOT NULL DEFAULT 1,
last_active_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
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_push_device_provider (user_id, device_id, provider),
KEY idx_push_user_status (user_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_feedback (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL,
category VARCHAR(30) NOT NULL,
content VARCHAR(2000) NOT NULL,
contact VARCHAR(100) NOT NULL DEFAULT '',
evidence_json JSON NULL,
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
reply_content VARCHAR(2000) NOT NULL DEFAULT '',
handled_by BIGINT UNSIGNED NULL,
handled_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),
KEY idx_feedback_user_created (user_id, created_at),
KEY idx_feedback_status_created (status, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_account_closures (
user_id BIGINT UNSIGNED NOT NULL,
reason VARCHAR(500) NOT NULL DEFAULT '',
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
requested_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
execute_after DATETIME(3) NOT NULL,
cancelled_at DATETIME(3) NULL,
completed_at DATETIME(3) NULL,
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (user_id),
KEY idx_closure_status_execute (status, execute_after)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_consents (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL,
agreement_type VARCHAR(30) NOT NULL,
agreement_version VARCHAR(30) NOT NULL,
accepted_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
ip VARCHAR(45) NOT NULL DEFAULT '',
device_id VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (id),
UNIQUE KEY uk_user_consent_version (user_id, agreement_type, agreement_version)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE orders
ADD COLUMN refund_reason VARCHAR(500) NOT NULL DEFAULT '' AFTER payment_notified_at,
ADD COLUMN refund_requested_at DATETIME(3) NULL AFTER refund_reason;
INSERT INTO user_notification_settings(user_id)
SELECT id FROM users
ON DUPLICATE KEY UPDATE user_id=VALUES(user_id);
INSERT INTO system_configs (config_key,config_value,value_type,description) VALUES
('membership.free_daily_like_limit','20','number','普通用户每日点赞次数'),
('account.cancellation_cooling_days','7','number','账号注销冷静期天数'),
('legal.user_agreement_version','1.0','string','用户协议版本'),
('legal.privacy_policy_version','1.0','string','隐私政策版本'),
('legal.operator_name','','string','平台运营主体全称(上线前必填)'),
('legal.contact','','string','隐私与客服联系方式(上线前必填)'),
('legal.effective_date','','string','协议生效日期,格式 YYYY-MM-DD'),
('legal.user_agreement_url','','string','完整用户协议 HTTPS 地址'),
('legal.privacy_policy_url','','string','完整隐私政策 HTTPS 地址'),
('app.maintenance.enabled','false','boolean','客户端维护模式'),
('app.maintenance.message','系统维护中,请稍后再试','string','客户端维护提示'),
('app.features.nearby','true','boolean','附近功能开关'),
('app.features.feed','true','boolean','动态功能开关'),
('app.features.membership','true','boolean','会员功能开关'),
('app.features.im','true','boolean','即时通讯功能开关'),
('app.min_version.android','1.0.0','string','Android 最低版本'),
('app.min_version.ios','1.0.0','string','iOS 最低版本'),
('app.min_version.h5','1.0.0','string','H5 最低版本')
ON DUPLICATE KEY UPDATE description=VALUES(description),value_type=VALUES(value_type);