数据库迁移 SQL + Model 层完整代码

  1. 基于现有项目模型,兼容已有业务;
  2. 执行 SQL 前建议先备份数据库
  3. GORM AutoMigrate 不会执行 ALTER 增加已有表字段,必须手动执行下面 SQL 脚本
  4. 新增三张表:user_favoritesreportsadmin_operation_log
  5. 已有表: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';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千码君2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值