All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 4m57s
- 新增数据库迁移文件添加last_login_time字段 - 在登录逻辑中更新最后登录时间 - 添加FindActiveSubscribesByUserIds方法查询用户订阅状态 - 在用户列表接口中聚合最后登录时间和会员状态信息 - 更新相关API定义和模型结构 - 修复迁移文件版本号冲突问题 - 移除omitempty标签确保字段始终返回
45 lines
2.0 KiB
Markdown
45 lines
2.0 KiB
Markdown
# 用户管理系统优化方案 (最终确认版)
|
|
|
|
根据您的要求,我们将重点实现 `last_login_time` 字段的存储与返回,以及在列表接口中聚合会员套餐信息。
|
|
|
|
## 实施步骤
|
|
|
|
### 1. 数据库变更
|
|
- **文件**: `initialize/migrate/database/02121_add_user_last_login_time.up.sql`
|
|
- **内容**:
|
|
```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_time` 和 `member_status`。
|