修改每日签到规则,修改获取签到列表接口规则
This commit is contained in:
parent
27e08d7d40
commit
970f004dad
11
docs/api.md
11
docs/api.md
@ -337,20 +337,25 @@ body:
|
||||
|
||||
#### Request
|
||||
|
||||
- URL:`/api/user/state/checkin_list`
|
||||
- URL:`/api/user/checkin/list?tag=`
|
||||
- 方法:`GET`
|
||||
- 头部:
|
||||
- Authorization: Bearer JWT_token
|
||||
|
||||
query param
|
||||
|
||||
| Name | Type | Desc |
|
||||
| ------- | ------ | -------- |
|
||||
| tag | string | last: 最新, 前一天+今天, 1month: 当月 |
|
||||
#### Response
|
||||
|
||||
```json
|
||||
[
|
||||
[
|
||||
{
|
||||
"address": "钱包地址",
|
||||
"day": "20240105", // 格式化后签到日期, 时区按SG(UTC+8)
|
||||
"time": 1704436745 // 具体的签到时间
|
||||
"time": 1704436745, // 具体的签到时间
|
||||
"count": 0 //连签天数
|
||||
},
|
||||
]
|
||||
```
|
@ -105,11 +105,11 @@
|
||||
"type": 1,
|
||||
"desc": "",
|
||||
"category": "Special Quests",
|
||||
"score": 100,
|
||||
"score": 20,
|
||||
"autoclaim": false,
|
||||
"pretasks": [],
|
||||
"cfg": {},
|
||||
"params": {"days": 1}
|
||||
"cfg": {"score": [0, 15, 20, 20, 40, 40, 60]},
|
||||
"params": {"days": 1, "score": [0, 15, 20, 20, 40, 40, 60]}
|
||||
}, {
|
||||
"id": "e2f7t4lj30vwcpe0ldr",
|
||||
"task": "ShareCode",
|
||||
|
@ -122,13 +122,21 @@ class SignController extends BaseController {
|
||||
return { boost: user.boost, boostExpire: user.boostExpire };
|
||||
}
|
||||
|
||||
@router('get /api/user/state/checkin_list')
|
||||
@router('get /api/user/checkin/list/:tag')
|
||||
async checkInList(req){
|
||||
const user = req.user;
|
||||
const res = await queryCheckInList(user.address, '1month', 0)
|
||||
const {tag} = req.params;
|
||||
let days: any = 1;
|
||||
if (tag === '1month') {
|
||||
days = '1month'
|
||||
} else if (tag === 'last') {
|
||||
days = '1'
|
||||
}
|
||||
const res = await queryCheckInList(user.address, days, 0)
|
||||
return res.data
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* regist user by token from wallet-svr
|
||||
* TODO::
|
||||
|
@ -1,8 +1,9 @@
|
||||
import { ITask } from "./base/ITask";
|
||||
import { ZError } from "common/ZError";
|
||||
import { TaskStatusEnum } from "models/ActivityUser";
|
||||
import { TaskStatus, TaskStatusEnum } from "models/ActivityUser";
|
||||
import { TaskCfg } from "models/ActivityInfo";
|
||||
import { queryCheckInList } from "services/chain.svr";
|
||||
import { updateRankScore } from "services/rank.svr";
|
||||
|
||||
// TODO:: test
|
||||
/**
|
||||
@ -46,4 +47,34 @@ export default class DailyCheckIn extends ITask {
|
||||
return true
|
||||
}
|
||||
|
||||
public async claimReward(task: TaskStatus) {
|
||||
// await super.claimReward(task);
|
||||
// 增加连续签到奖励分
|
||||
// 请求前7天的签到记录, 往前查找连续签到的记录,
|
||||
const res = await queryCheckInList(this.params.user.address, 1, 0)
|
||||
const [taskId, dateTag] = task.id.split(':');
|
||||
let list: { day: string, time: number, count: number }[] = res.data;
|
||||
let cfg = this.params.activity.tasks.find((t: TaskCfg) => t.id === task.id)
|
||||
const countCfg = cfg.params.score.length;
|
||||
let count = list.length > 0 ? list[0].count : 0;
|
||||
let seq = count % countCfg;
|
||||
let score = cfg.params.score[seq] + cfg.score;
|
||||
const user = this.params.user
|
||||
if (user.boost > 1 && Date.now() < user.boostExpire) {
|
||||
score = Math.floor(score * user.boost)
|
||||
}
|
||||
await updateRankScore({
|
||||
user: this.params.user.id,
|
||||
score: score,
|
||||
activity: this.params.user.activity,
|
||||
scoreType: cfg.task,
|
||||
scoreParams: {
|
||||
taskId: task.id,
|
||||
date: dateTag,
|
||||
bouns: score,
|
||||
boost: user.boost,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
@ -32,7 +32,8 @@ export abstract class ITask {
|
||||
scoreType: cfg.task,
|
||||
scoreParams: {
|
||||
date: dateTag,
|
||||
taskId: task.id
|
||||
taskId: task.id,
|
||||
boost: user.boost
|
||||
}
|
||||
})
|
||||
task.status = TaskStatusEnum.CLAIMED
|
||||
|
Loading…
x
Reference in New Issue
Block a user