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

73 lines
2.8 KiB
SQL

CREATE TABLE IF NOT EXISTS reports (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
reporter_user_id BIGINT UNSIGNED NOT NULL,
target_type VARCHAR(30) NOT NULL,
target_id BIGINT UNSIGNED NOT NULL,
reason_code VARCHAR(50) NOT NULL,
description VARCHAR(1000) NOT NULL DEFAULT '',
evidence_json JSON NULL,
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
handled_by BIGINT UNSIGNED NULL,
handled_at DATETIME(3) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
KEY idx_reports_status_created (status, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS moderation_tasks (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
target_type VARCHAR(30) NOT NULL,
target_id BIGINT UNSIGNED NOT NULL,
content_type VARCHAR(30) NOT NULL,
risk_score INT NOT NULL DEFAULT 0,
machine_result JSON NULL,
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
reviewer_id BIGINT UNSIGNED NULL,
review_result VARCHAR(255) NOT NULL DEFAULT '',
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
reviewed_at DATETIME(3) NULL,
PRIMARY KEY (id),
KEY idx_moderation_status_created (status, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_risk_profiles (
user_id BIGINT UNSIGNED NOT NULL,
risk_score INT NOT NULL DEFAULT 0,
risk_level TINYINT UNSIGNED NOT NULL DEFAULT 0,
message_score INT NOT NULL DEFAULT 0,
device_score INT NOT NULL DEFAULT 0,
report_score INT NOT NULL DEFAULT 0,
behavior_score INT NOT NULL DEFAULT 0,
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (user_id),
KEY idx_risk_level_score (risk_level, risk_score)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS risk_events (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL,
event_type VARCHAR(50) NOT NULL,
score_delta INT NOT NULL,
device_id VARCHAR(100) NOT NULL DEFAULT '',
ip VARCHAR(45) NOT NULL DEFAULT '',
metadata JSON NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
KEY idx_risk_event_user_created (user_id, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS notifications (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL,
type VARCHAR(30) NOT NULL,
title VARCHAR(100) NOT NULL,
content VARCHAR(1000) NOT NULL,
biz_type VARCHAR(30) NOT NULL DEFAULT '',
biz_id BIGINT UNSIGNED NULL,
read_at DATETIME(3) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
KEY idx_notify_user_read_created (user_id, read_at, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;