hi-server/.trae/documents/最后上线时间字段显示修复计划.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
Raw Blame History

最后上线时间字段显示修复计划

问题分析

用户反馈调用 curl 接口后,返回的 JSON 中没有看到“最后上线时间” (last_login_time) 字段。

原因可能如下:

  1. 字段被 omitempty 隐藏: 在 internal/types/types.go 中,LastLoginTime 字段定义为 json:"last_login_time,omitempty"。这意味着如果值为 0,该字段在 JSON 序列化时会被忽略,不返回给前端。
  2. 数据确实为空: 用户从未登录过,且没有活跃订阅产生的流量记录,导致计算出的 LastLoginTime0
  3. 数据库迁移未生效: 虽然我们之前修复了迁移文件冲突,但如果数据库中旧的迁移记录未清理或新字段 last_login_time 未真正添加成功,会导致数据读取失败(但此时通常会报错,而非字段缺失)。

解决方案

为了确保接口始终返回该字段(即使是 0我们需要移除 omitempty 标签,或者确认前端能处理缺失该字段的情况。考虑到用户明确要求“没看到”,建议移除 omitempty,让其显式返回 0 或时间戳。

同时,我们通过 SQL 检查数据库结构,确保字段已存在。

实施步骤

  1. 修改 API 定义:

    • 文件: internal/types/types.go (及 apis/types.api 如果需要重新生成代码,但直接改 go 文件更快捷验证)
    • 操作: 将 LastLoginTime int64 json:"last_login_time,omitempty" 修改为 json:"last_login_time" (移除 omitempty)。
    • 同理处理 MemberStatus 字段。
  2. 验证数据库字段:

    • 使用 SQL 工具或日志确认 user 表中是否存在 last_login_time 列。
  3. 验证接口:

    • 再次调用 curl,确认即使值为 0 也会返回字段。

补充

如果用户是指“有数据但没显示”,那可能是登录逻辑或流量更新逻辑未触发。但首要步骤是让字段显式返回,以便排查是“无数据”还是“字段被隐藏”。