Files
nl-blogs/.trae/documents/修复操作日志和角色列表功能异常.md
2026-01-15 13:51:44 +08:00

2.8 KiB
Raw Permalink Blame History

问题分析

1. 获取操作日志功能失败

  • 错误原因:数据库中缺少 operation_logs
  • 代码分析operation_log_repository.go 中的 GetOperationLogs 函数尝试从 operation_logs 表查询数据,但该表不存在
  • SQL文件状态nl_blog.sql 中没有定义 operation_logs

2. 获取角色列表功能失败

  • 错误原因:数据库中缺少 roles
  • 代码分析role_repository.go 中的 GetRoles 函数尝试从 roles 表查询数据,但该表不存在
  • SQL文件状态nl_blog.sql 中没有定义 roles
  • 设计不一致:用户表 usersrole 字段使用 enum('admin','editor','viewer') 类型,表明角色设计为内嵌式,而非独立表管理

修复方案

1. 修复操作日志功能

  • 创建 operation_logs:在 nl_blog.sql 中添加表定义
  • 表结构
    DROP TABLE IF EXISTS `operation_logs`;
    CREATE TABLE `operation_logs` (
      `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `user_id` bigint UNSIGNED NOT NULL COMMENT '操作用户ID',
      `username` varchar(50) NOT NULL COMMENT '操作用户名',
      `ip` varchar(45) NOT NULL COMMENT '操作IP地址',
      `path` varchar(255) NOT NULL COMMENT '操作路径',
      `method` varchar(10) NOT NULL COMMENT 'HTTP方法',
      `params` text NULL COMMENT '请求参数',
      `status` int NOT NULL COMMENT '响应状态码',
      `duration` int NOT NULL COMMENT '响应时间(毫秒)',
      `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
      PRIMARY KEY (`id`) USING BTREE,
      INDEX `idx_user_id`(`user_id` ASC) USING BTREE,
      INDEX `idx_created_at`(`created_at` ASC) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '操作日志表' ROW_FORMAT = Dynamic;
    

2. 修复角色列表功能

  • 方案A:修改代码以适应现有设计(推荐)

    • 由于用户表中角色是 enum 类型,系统可能不需要独立的 roles
    • 修改 role_repository.go 中的 GetRoles 函数,返回硬编码的角色列表
    • 这样可以保持与现有数据库设计的一致性
  • 方案B:创建 roles 表并迁移数据

    • nl_blog.sql 中添加 roles 表定义
    • 插入初始角色数据
    • 这种方案需要更多的数据库迁移工作

3. 实现步骤

  1. 首先创建 operation_logs 表,修复操作日志功能
  2. 然后根据系统设计选择合适的角色管理方案,修复角色列表功能
  3. 更新 nl_blog.sql 文件,确保包含所有必要的表定义
  4. 测试修复后的功能

预期结果

  • 操作日志功能能够正常获取日志记录
  • 角色列表功能能够正常返回角色数据
  • 系统设计与数据库结构保持一致