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

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));