Shop Redeem Mock API
源码:
web/src/mock/modules/shop/redeem.ts
接口列表
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/shop/rewards/:rewardId/redeem | 兑换奖励 |
| GET | /api/v1/shop/history | 获取兑换历史 |
请求参数
POST /api/v1/shop/rewards/:rewardId/redeem
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| rewardId | 路径 | string | 奖励ID |
GET /api/v1/shop/history
无请求参数。
业务逻辑
兑换流程:
- 检查奖励是否存在且已启用
- 检查用户积分是否足够
- 扣除积分,记录积分日志(
pointLog) - 记录兑换历史(
shopHistory),保留最近 50 条
响应格式
POST /api/v1/shop/rewards/:rewardId/redeem
json
{
"code": 0,
"msg": "ok",
"data": {
"rewardName": "看动画",
"cost": 10,
"pointsBefore": 150,
"pointsAfter": 140
}
}错误响应:
- 奖励不存在:
{ "code": 404, "msg": "奖励不存在", "data": null } - 奖励已禁用:
{ "code": 400, "msg": "奖励已禁用", "data": null } - 积分不足:
{ "code": 400, "msg": "积分不足", "data": null }
GET /api/v1/shop/history
返回按时间倒序的兑换历史(最近的在前面):
json
{
"code": 0,
"msg": "ok",
"data": [
{
"id": "sh_001",
"rewardId": "rw_001",
"rewardName": "看动画",
"cost": 10,
"redeemedAt": "2026-01-01T00:00:00.000Z",
"pointsBefore": 150,
"pointsAfter": 140
}
]
}被哪个 Store 调用
- ShopStore (
web/src/stores/shop.ts)redeemReward(rewardId)→POST /api/v1/shop/rewards/:rewardId/redeemload()→GET /api/v1/shop/history