diff --git a/docs/api.md b/docs/api.md index f5184c4..4a8427f 100644 --- a/docs/api.md +++ b/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 //连签天数 }, ] ``` \ No newline at end of file diff --git a/initdatas/activity_info.json b/initdatas/activity_info.json index 823734b..362d5e7 100644 --- a/initdatas/activity_info.json +++ b/initdatas/activity_info.json @@ -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", diff --git a/src/controllers/sign.controller.ts b/src/controllers/sign.controller.ts index 72ec2e3..5a2a1b7 100644 --- a/src/controllers/sign.controller.ts +++ b/src/controllers/sign.controller.ts @@ -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:: diff --git a/src/tasks/DailyCheckIn.ts b/src/tasks/DailyCheckIn.ts index b4b0622..b713f90 100644 --- a/src/tasks/DailyCheckIn.ts +++ b/src/tasks/DailyCheckIn.ts @@ -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, + } + }) + } + } \ No newline at end of file diff --git a/src/tasks/base/ITask.ts b/src/tasks/base/ITask.ts index 466cf37..c657556 100644 --- a/src/tasks/base/ITask.ts +++ b/src/tasks/base/ITask.ts @@ -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