65 lines
3.1 KiB
SQL
65 lines
3.1 KiB
SQL
SET NAMES utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS user_verifications (
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
verification_type VARCHAR(30) NOT NULL DEFAULT 'real_name',
|
|
status VARCHAR(20) NOT NULL DEFAULT 'UNVERIFIED',
|
|
real_name VARCHAR(50) NOT NULL DEFAULT '',
|
|
document_mask VARCHAR(80) NOT NULL DEFAULT '',
|
|
remark VARCHAR(500) NOT NULL DEFAULT '',
|
|
reviewer_admin_id BIGINT UNSIGNED NULL,
|
|
submitted_at DATETIME(3) NULL,
|
|
reviewed_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 (user_id),
|
|
KEY idx_verification_status_updated (status, updated_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS user_sanctions (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
sanction_type VARCHAR(30) NOT NULL,
|
|
reason VARCHAR(500) NOT NULL,
|
|
starts_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
expires_at DATETIME(3) NULL,
|
|
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
|
|
operator_admin_id BIGINT UNSIGNED NOT NULL,
|
|
revoked_by BIGINT UNSIGNED NULL,
|
|
revoked_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_sanction_user_status_expire (user_id, status, expires_at),
|
|
KEY idx_sanction_created (created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS user_security_controls (
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
token_version INT UNSIGNED NOT NULL DEFAULT 0,
|
|
force_logout_at DATETIME(3) NULL,
|
|
password_reset_at DATETIME(3) NULL,
|
|
last_operator_admin_id BIGINT UNSIGNED NULL,
|
|
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;
|
|
|
|
SET @token_version_exists=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='user_security_controls' AND COLUMN_NAME='token_version');
|
|
SET @token_version_sql=IF(@token_version_exists=0,'ALTER TABLE user_security_controls ADD COLUMN token_version INT UNSIGNED NOT NULL DEFAULT 0 AFTER user_id','SELECT 1');
|
|
PREPARE token_version_stmt FROM @token_version_sql;
|
|
EXECUTE token_version_stmt;
|
|
DEALLOCATE PREPARE token_version_stmt;
|
|
|
|
INSERT INTO user_verifications (user_id, status)
|
|
SELECT u.id, 'UNVERIFIED' FROM users u
|
|
LEFT JOIN user_verifications v ON v.user_id=u.id
|
|
WHERE v.user_id IS NULL;
|
|
|
|
INSERT INTO subscriptions (user_id, plan_id, source, status, started_at, expires_at)
|
|
SELECT p.user_id, mp.id, 'legacy_backfill', 1, NOW(3), DATE_ADD(NOW(3), INTERVAL mp.duration_days DAY)
|
|
FROM user_profiles p
|
|
JOIN membership_plans mp ON mp.level=p.vip_level
|
|
AND mp.duration_days=(SELECT MAX(mp2.duration_days) FROM membership_plans mp2 WHERE mp2.level=p.vip_level)
|
|
WHERE p.is_vip=1 AND p.vip_level>0
|
|
AND NOT EXISTS (SELECT 1 FROM subscriptions s WHERE s.user_id=p.user_id AND s.status=1 AND s.expires_at>NOW(3));
|