## 目标 - 在 APP 端新增接口,直接返回当前登录用户在 `user_inventory` 表中的分页数据,用于“用户中奖数据”查询。 ## 接口设计 - 路径:`GET /api/app/users/{user_id}/inventory` - 鉴权:`AppTokenAuthVerify`,以会话 `ctx.SessionUserInfo().Id` 为准(参考 `internal/api/user/points_app.go:47`)。 - 入参(query):`page`(默认1)、`page_size`(默认20,最大100)。 - 出参(JSON): - `page`、`page_size`、`total` - `list`:元素为 `model.UserInventory`,字段:`id,user_id,product_id,order_id,activity_id,reward_id,status,remark,created_at,updated_at`。 ## 数据来源 - 直接读取 `user_inventory` 表(模型:`internal/repository/mysql/model/user_inventory.gen.go:13`)。 - 分页与排序:按 `id DESC`,与管理端一致(参考 `internal/api/admin/users_admin.go:246-256` 的资产列表实现风格)。 ## 实现方案 1. 新增 `internal/api/user/inventory_app.go`: - 定义 `listInventoryRequest/listInventoryResponse`(`list` 为 `[]*model.UserInventory`)。 - `handler.ListUserInventory()`: - 绑定分页参数→会话用户 ID→在 `h.readDB.UserInventory` 上过滤 `user_id` 后 `Count` 与 `Find`(`Order(ID.Desc)`、`Offset/Limit`)。 - 组装分页响应并 `ctx.Payload`。 - Swagger 注释与现有风格一致(参考 `internal/api/user/coupons_app.go:34-46`)。 2. 路由注册(`internal/router/router.go:236` APP 认证组): - `appAuthApiRouter.GET("/users/:user_id/inventory", userHandler.ListUserInventory())` ## 测试要点 - 正常:用户存在记录,分页与 `total` 正确。 - 空数据:返回 `list=[]`、`total=0`。 - 边界参数:`page≤0`→重置为 1;`page_size` 超上限→重置为 100。 - 鉴权:忽略路径 `user_id`,以会话用户为准。 ## 参考代码位置 - 模型定义:`internal/repository/mysql/model/user_inventory.gen.go:13`。 - 路由分组:`internal/router/router.go:236`。 - 鉴权风格:`internal/api/user/points_app.go:47`。