hi-server/.trae/documents/User Management Optimization Plan.md
shanshanzhong 657c2930b1
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 4m57s
feat(用户管理): 添加最后登录时间和会员状态功能
- 新增数据库迁移文件添加last_login_time字段
- 在登录逻辑中更新最后登录时间
- 添加FindActiveSubscribesByUserIds方法查询用户订阅状态
- 在用户列表接口中聚合最后登录时间和会员状态信息
- 更新相关API定义和模型结构
- 修复迁移文件版本号冲突问题
- 移除omitempty标签确保字段始终返回
2026-01-05 01:46:39 -08:00

2.0 KiB

用户管理系统优化方案 (最终确认版)

根据您的要求,我们将重点实现 last_login_time 字段的存储与返回,以及在列表接口中聚合会员套餐信息。

实施步骤

1. 数据库变更

  • 文件: initialize/migrate/database/02121_add_user_last_login_time.up.sql
  • 内容:
    ALTER TABLE user ADD COLUMN last_login_time DATETIME DEFAULT NULL COMMENT 'Last Login Time';
    
  • 说明: 相比查询日志表,直接在用户表增加字段能极大提高列表页查询性能。

2. API 定义更新

  • 文件: apis/types.api
  • 内容: 修改 User 结构体,增加以下返回字段:
    • last_login_time (int64): 最后活跃时间戳。
    • member_status (string): 会员状态(显示当前生效的订阅套餐名称,无订阅显示空或特定标识)。

3. 后端模型与逻辑更新

3.1 User 模型更新

  • 文件: internal/model/user/user.go
  • 内容: User 结构体增加 LastLoginTime *time.Time 字段。

3.2 登录逻辑更新 (记录活跃时间)

  • 文件: internal/logic/auth/userLoginLogic.go (及其他登录逻辑如 emailLoginLogic.go)
  • 内容: 在登录成功后,异步或同步更新当前用户的 last_login_time

3.3 用户列表逻辑更新 (数据聚合)

  • 文件: internal/logic/admin/user/getUserListLogic.go
  • 内容:
    1. 获取用户列表: 包含新增的 LastLoginTime 数据。
    2. 批量查询订阅: 根据当前页的用户 ID 列表,批量查询其活跃订阅 (Active Subscription)。
    3. 数据组装:
      • LastLoginTime 转换为时间戳返回。
      • 将订阅的 Name (套餐名) 赋值给 member_status

4. 文档更新

  • 文件: doc/说明文档.md
  • 内容: 更新进度记录,标记完成“最后活跃”与“会员状态”字段开发。

验证与交付

  • 提供 curl 验证命令,确认 /v1/admin/user/list 接口返回的 JSON 中包含 last_login_timemember_status