- 基于现有项目模型,兼容已有业务;
- 执行 SQL 前建议先备份数据库;
- GORM AutoMigrate 不会执行 ALTER 增加已有表字段,必须手动执行下面 SQL 脚本;
- 新增三张表:
user_favorites、reports、admin_operation_log; - 已有表:
app_info/app_version/comment/user增加字段。
-- ====================== 1.app_info 增加投流权重 ======================
ALTER TABLE `app_info`
ADD COLUMN `flow_weight` INT NOT NULL DEFAULT 0 COMMENT '运营投流权重 0‑100,越大曝光越高';
-- ====================== 2.app_version 增加版本禁用标记 ======================
ALTER TABLE `app_version`
ADD COLUMN `is_disabled` TINYINT NOT NULL DEFAULT 0 COMMENT '1=版本已禁用,禁止下载;0正常';
-- ======================3.comment评论表增加风控字段(仅管理员可见) ======================
ALTER TABLE `comment`
ADD COLUMN `device_type` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '设备类型 android/ios/web‑pc/web‑tablet/web‑mobile',
ADD COLUMN `terminal_kind` ENUM('phone','tablet','pc','unknown') NOT NULL DEFAULT 'unknown' COMMENT '终端大类',
ADD COLUMN `ip_location` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '解析后IP归属地,不存原始IP';
-- ======================4.user 用户表 扩展封禁相关字段 ======================
ALTER TABLE `user`
ADD COLUMN `ban_status` ENUM('normal','restrict_upload','banned') NOT NULL DEFAULT 'normal' COMMENT 'normal正常 restrict_upload限制上传 banned完全封禁',
ADD COLUMN `ban_expire_at` DATETIME NULL COMMENT '封禁到期时间;NULL代表永久封禁',
ADD COLUMN `ban_reason` VARCHAR(512) NULL COMMENT '封禁原因说明';
-- ======================5.新增:user_favorites 用户收藏中间表 ======================
CREATE TABLE IF NOT EXISTS `user_favorites` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` INT UNSIGNED NOT NULL COMMENT '用户ID',
`app_id` INT UNSIGNED NOT NULL COMMENT '应用ID',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_uid_aid` (`user_id`,`app_id`) COMMENT '联合唯一,防止重复收藏',
KEY `idx_user_id` (`user_id`),
KEY `idx_app_id` (`app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户‑应用收藏中间表';
-- ======================6.新增:reports 举报记录表 ======================
CREATE TABLE IF NOT EXISTS `reports` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`app_id` INT UNSIGNED NULL COMMENT '被举报应用ID,举报评论则为NULL',
`comment_id` INT UNSIGNED NULL COMMENT '被举报评论ID,举报应用则为NULL',
`reporter_user_id` INT UNSIGNED NOT NULL COMMENT '举报人用户ID',
`reason` VARCHAR(512) NOT NULL COMMENT '举报原因文字',
`status` ENUM('pending','handled') NOT NULL DEFAULT 'pending' COMMENT 'pending待处理 / handled已处理',
`handle_action` VARCHAR(64) NULL COMMENT '处理动作:ignore/delete_comment/offline_app/restrict_user',
`handle_note` VARCHAR(512) NULL COMMENT '管理员处理备注',
`handle_at` DATETIME NULL COMMENT '处理时间',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '举报提交时间',
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_reporter` (`reporter_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='举报记录表(应用、评论举报)';
-- ======================7.新增:admin_operation_log 管理员操作审计日志 ======================
CREATE TABLE IF NOT EXISTS `admin_operation_log` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`operator_id` INT UNSIGNED NOT NULL COMMENT '操作管理员ID',
`operate_type` VARCHAR(64) NOT NULL COMMENT '操作类型:approve_app/reject_app/set_flow_weight/restrict_user/delete_comment/handle_report',
`target_id` INT UNSIGNED NULL COMMENT '被操作目标ID',
`before_json` TEXT NULL COMMENT '变更前快照JSON',
`after_json` TEXT NULL COMMENT '变更后快照JSON',
`ip_location` VARCHAR(128) NULL COMMENT '操作人IP归属地',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作发生时间',
PRIMARY KEY (`id`),
KEY `idx_operator` (`operator_id`),
KEY `idx_operate_type` (`operate_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员操作审计日志';
确认二期 DDL 是否真正执行成功
执行下面查询,确认新增字段、新增表存在:
-- 检查app_info投流权重字段
DESC app_info;
-- 检查app_version版本禁用字段
DESC app_version;
-- 检查comment评论风控字段
DESC comment;
-- 检查user封禁字段
DESC `user`;
-- 检查三张新增表是否存在
SHOW TABLES LIKE 'user_favorites';
SHOW TABLES LIKE 'reports';
SHOW TABLES LIKE 'admin_operation_log';

296

被折叠的 条评论
为什么被折叠?



