forked from wangziqi/gongxue-base
feat: configure daily check-in rewards
This commit is contained in:
@@ -1171,10 +1171,41 @@ POST /api/profile/check-in
|
||||
"item": {
|
||||
"checkedIn": true,
|
||||
"alreadyCheckedIn": false,
|
||||
"pointsAdded": 10,
|
||||
"pointsAdded": 17,
|
||||
"streak": 1,
|
||||
"score": 10,
|
||||
"score": 17,
|
||||
"lastCheckInDate": "2026-06-29",
|
||||
"rewardMode": "configured_tasks",
|
||||
"rewardBreakdown": [
|
||||
{
|
||||
"taskId": "<daily-check-in-task-id>",
|
||||
"taskCode": "daily-check-in",
|
||||
"title": "每日签到基础奖励",
|
||||
"points": 12,
|
||||
"periodKey": "2026-06-29"
|
||||
},
|
||||
{
|
||||
"taskId": "<streak-task-id>",
|
||||
"taskCode": "check-in-streak-day-one",
|
||||
"title": "连续签到首日奖励",
|
||||
"points": 5,
|
||||
"periodKey": "2026-06-29"
|
||||
}
|
||||
],
|
||||
"ledgers": [
|
||||
{
|
||||
"eventType": "check_in",
|
||||
"sourceType": "point_activity_tasks",
|
||||
"sourceId": "<daily-check-in-task-id>"
|
||||
}
|
||||
],
|
||||
"claims": [
|
||||
{
|
||||
"taskId": "<daily-check-in-task-id>",
|
||||
"periodKey": "2026-06-29",
|
||||
"sourceType": "student_profiles"
|
||||
}
|
||||
],
|
||||
"autoBadges": [
|
||||
{
|
||||
"badgeId": "...",
|
||||
@@ -1194,6 +1225,8 @@ POST /api/profile/check-in
|
||||
- `alreadyCheckedIn=true` 时展示今日已签到,不要本地再加分。
|
||||
- 积分明细调用 `GET /api/profile/score-events`。
|
||||
- 积分最终余额以后端 `score` 和流水为准,前端只做展示。
|
||||
- 租户如配置了 `taskType=daily_check_in` 的积分任务,签到会返回 `rewardMode=configured_tasks` 和 `rewardBreakdown`;前端可展示每项奖励,但不要重新计算连续签到奖励。
|
||||
- 租户未配置每日签到任务时,后端会使用兼容旧逻辑的固定积分公式,并返回 `rewardMode=legacy_formula`。
|
||||
- 如响应包含 `autoBadges`,可展示获得勋章弹层;不要在前端根据连续天数或积分自行判断勋章是否解锁。
|
||||
|
||||
积分活动任务和积分兑换入口:
|
||||
@@ -1229,7 +1262,7 @@ POST /api/profile/exchange-items/redeem
|
||||
|
||||
- 积分任务领取、积分扣减、库存扣减、个人限购、优惠券兑换履约都由后端事务处理。
|
||||
- `practice_complete`、`mock_exam_submit`、`vocabulary_review` 等任务需要传 `sourceId`,后端会校验证据属于当前学生当前租户。
|
||||
- `feedback_resolved` 等系统流程任务禁止学生自领,前端应展示为“系统发放”或不展示领取按钮。
|
||||
- `daily_check_in`、`feedback_resolved` 等系统流程任务禁止学生自领,前端应展示为“系统发放”或不展示领取按钮;签到只调用 `POST /api/profile/check-in`。
|
||||
- 兑换返回 `order` 和最新积分余额后,再刷新 `profile/me`、`score-events` 和兑换列表;不要在本地先扣积分。
|
||||
- 如果响应包含 `autoBadges`,按获得勋章提示处理;重复领取、库存不足、积分不足、限购等错误按后端 `code` 展示业务提示。
|
||||
|
||||
@@ -1248,6 +1281,32 @@ GET /api/tenant-admin/point-exchange-orders?itemId=<item-id>&status=pending_fulf
|
||||
|
||||
当前 Taro 第一版已经把租户积分运营嵌入 `apps/taro/src/pages/tenant-admin/marketing/index.tsx`,支持任务配置、兑换商品配置、任务领取记录和兑换订单查看。前端只提交配置和筛选条件,权限、优惠券/资源归属、库存、限购、积分扣减和审计仍由后端处理。
|
||||
|
||||
每日签到奖励配置复用同一组积分任务接口:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": "daily-check-in",
|
||||
"title": "每日签到基础奖励",
|
||||
"taskType": "daily_check_in",
|
||||
"rewardPoints": 12,
|
||||
"periodType": "daily",
|
||||
"metadata": {}
|
||||
}
|
||||
```
|
||||
|
||||
连续签到规则写在 `metadata`,后端按当前连续签到天数匹配,命中后自动写 `user_score_events` 和 `user_point_activity_claims`。常用字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"requiredStreak": 7,
|
||||
"minStreak": 3,
|
||||
"maxStreak": 30,
|
||||
"streakMultipleOf": 7
|
||||
}
|
||||
```
|
||||
|
||||
规则说明:`requiredStreak` 表示仅第 N 天命中,`minStreak/maxStreak` 表示连续天数区间,`streakMultipleOf` 表示连续天数为 N 的倍数时命中。多个 `daily_check_in` 任务可同时生效,后端会逐项发放并返回 `rewardBreakdown`。
|
||||
|
||||
题目页、资料页或视频页可提交反馈:
|
||||
|
||||
```json
|
||||
|
||||
Reference in New Issue
Block a user