From 970f004dadfc14a191571e2f4551baa982b4ced7 Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Mon, 8 Jan 2024 19:32:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=AF=8F=E6=97=A5=E7=AD=BE?= =?UTF-8?q?=E5=88=B0=E8=A7=84=E5=88=99,=E4=BF=AE=E6=94=B9=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=AD=BE=E5=88=B0=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/api.md | 11 +++++++--- initdatas/activity_info.json | 6 +++--- src/controllers/sign.controller.ts | 12 +++++++++-- src/tasks/DailyCheckIn.ts | 33 +++++++++++++++++++++++++++++- src/tasks/base/ITask.ts | 3 ++- 5 files changed, 55 insertions(+), 10 deletions(-) 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