# 接口文档：商城与积分

本文档描述了商城商品、积分兑换及优惠券相关接口。

## 1. 商城接口 (APP 端)

### 1.1 获取商城物品列表

统一获取商城中的可兑换物品，支持商品、道具卡、优惠券三种类型。

- **URL**: `/api/app/store/items`
- **Method**: `GET`
- **Auth**: Required (Bearer Token)

**请求参数 (Query)**:

| 参数名 | 类型 | 必填 | 默认值 | 说明 |
| :--- | :--- | :--- | :--- | :--- |
| `kind` | string | 否 | `product` | 物品类型，可选值：`product` (商品), `item_card` (道具卡), `coupon` (优惠券) |
| `page` | int | 否 | 1 | 页码 |
| `page_size` | int | 否 | 20 | 每页数量 (最大100) |

**响应示例 (JSON)**:

```json
{
  "total": 100,
  "page": 1,
  "page_size": 20,
  "list": [
    {
      "id": 1001,
      "kind": "product",
      "name": "IPhone 15",
      "main_image": "http://.../img.jpg",
      "price": 100000,
      "in_stock": true,
      "status": 1,
      "supported": true
    },
    {
      "id": 2001,
      "kind": "item_card",
      "name": "免运费卡",
      "price": 500,
      "status": 1,
      "supported": true
    },
    {
      "id": 3001,
      "kind": "coupon",
      "name": "10元代金券",
      "discount_type": 1,
      "discount_value": 1000,
      "min_spend": 0,
      "status": 1,
      "supported": true
    }
  ]
}
```

**字段说明**:

- `kind`: `product` | `item_card` | `coupon`
- `price`: 售价（分），仅 `product` 和 `item_card` 有效。
- `discount_type`: 优惠券类型，`1`: 直减金额券。
- `discount_value`: 优惠面额（分）。
- `supported`: 是否支持积分兑换（当前仅直减券支持）。

---

## 2. 积分兑换接口 (APP 端)

所有兑换接口均需登录，URL 中的 `:user_id` 仅作路由占位，实际操作以 Token 中的用户 ID 为准。

### 2.1 积分兑换商品

- **URL**: `/api/app/users/:user_id/points/redeem-product`
- **Method**: `POST`
- **Auth**: Required

**请求参数 (Body)**:

```json
{
  "product_id": 1001,
  "quantity": 1
}
```

**响应参数**:

```json
{
  "success": true,
  "ledger_id": 123456,
  "order_id": 987654,
  "inventory_ids": [111, 222],
  "message": "ok"
}
```

**说明**:
- `ledger_id`: 积分扣减流水 ID。
- `order_id`: 生成的发货订单 ID。
- `inventory_ids`: 发放到用户资产中的 ID 列表。

### 2.2 积分兑换道具卡

- **URL**: `/api/app/users/:user_id/points/redeem-item-card`
- **Method**: `POST`
- **Auth**: Required

**请求参数 (Body)**:

```json
{
  "card_id": 2001,
  "quantity": 1
}
```

**响应参数**:

```json
{
  "success": true,
  "card_id": 2001,
  "ledger_id": 123457,
  "message": "ok"
}
```

### 2.3 积分兑换优惠券

仅支持兑换直减金额券 (`discount_type=1`)。

- **URL**: `/api/app/users/:user_id/points/redeem-coupon`
- **Method**: `POST`
- **Auth**: Required

**请求参数 (Body)**:

```json
{
  "coupon_id": 3001
}
```

**响应参数**:

```json
{
  "success": true,
  "coupon_id": 3001,
  "ledger_id": 123458,
  "message": "ok"
}
```

---

## 3. 优惠券使用流水接口

记录优惠券的核销、抵扣详情。

### 3.1 查询优惠券使用记录 (APP 端)

- **URL**: `/api/app/users/:user_id/coupons/:user_coupon_id/usage`
- **Method**: `GET`
- **Auth**: Required

**请求参数 (Query)**:
- `page`: 页码 (默认1)
- `page_size`: 每页数量 (默认20)

**响应参数**:

```json
{
  "total": 5,
  "page": 1,
  "page_size": 20,
  "list": [
    {
      "id": 101,
      "change_amount": -100,
      "balance_after": 900,
      "order_id": 88888,
      "action": "apply",
      "created_at": "2025-01-01 12:00:00"
    }
  ]
}
```

**说明**:
- `change_amount`: 变动金额（分），负数表示扣减。
- `balance_after`: 变动后余额（分）。一次性券核销后余额为0。
- `order_id`: 关联的订单 ID。

### 3.2 查询优惠券使用记录 (管理端)

- **URL**: `/api/admin/users/:user_id/coupons/:user_coupon_id/usage`
- **Method**: `GET`
- **Auth**: Required (Admin Token)

**响应参数**:
与 APP 端类似，但在 List Item 中额外包含 `user_id` 和 `user_coupon_id` 字段。

---

## 4. 玩家管理接口 (管理端)

### 4.1 玩家列表搜索

支持按 ID 精确搜索玩家。

- **URL**: `/api/admin/users`
- **Method**: `GET`
- **Auth**: Required

**新增请求参数 (Query)**:
- `id`: int64 (可选) 用户 ID，精确匹配。

**原有参数**:
- `nickname`: 昵称模糊搜索
- `inviteCode`: 邀请码精确搜索
- `startDate` / `endDate`: 注册时间范围
