## 目标
- 在 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`。
