活动信息接口增加返回title和desc
This commit is contained in:
parent
bc17ea9f3a
commit
bb3e8dabe8
@ -4,13 +4,18 @@
|
||||
"name": "First Activity1",
|
||||
"description": "This is the first test activity",
|
||||
"tasks": [{
|
||||
"task": "TwitterConnect",
|
||||
"id": "TwitterConnect",
|
||||
"title": "Connect Twitter",
|
||||
"desc": "",
|
||||
"params": {}
|
||||
}, {
|
||||
"task": "TwitterFollow",
|
||||
"id": "TwitterFollow",
|
||||
"title": "Follow Twitter",
|
||||
"desc": "",
|
||||
"params": {"time": 6, "failRate": 60}
|
||||
}, {
|
||||
"task": "UpdateScore",
|
||||
"id": "UpdateScore",
|
||||
"show": false,
|
||||
"params": {"score": [100, 20]}
|
||||
}],
|
||||
"startTime": 1702628292366,
|
||||
|
@ -5,6 +5,7 @@ import { ActivityInfo } from "models/ActivityInfo";
|
||||
import { ActivityUser } from "models/ActivityUser";
|
||||
import { RedisClient } from "redis/RedisClient";
|
||||
|
||||
const MAX_LIMIT = 50
|
||||
export default class ActivityController extends BaseController {
|
||||
|
||||
@role(ROLE_ANON)
|
||||
@ -18,7 +19,15 @@ export default class ActivityController extends BaseController {
|
||||
if (!activity) {
|
||||
throw new ZError(12, 'activity not found')
|
||||
}
|
||||
return activity.toJson();
|
||||
let tasks = []
|
||||
for (let task of activity.tasks) {
|
||||
if (task.show) {
|
||||
tasks.push({id: task.id, title: task.title, desc: task.desc})
|
||||
}
|
||||
}
|
||||
let result = activity.toJson()
|
||||
result.tasks = tasks
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -42,16 +51,25 @@ export default class ActivityController extends BaseController {
|
||||
return {}
|
||||
}
|
||||
|
||||
@router('get /api/activity/leaderboard')
|
||||
@router('get /api/activity/leaderboard/:activity/:page')
|
||||
async inviteCode(req) {
|
||||
let user = req.user;
|
||||
let records = await new RedisClient().zrevrange(`${user.activity}:score`, 0, 9)
|
||||
let { page, activity, limit } = req.params
|
||||
page = parseInt(page || '0')
|
||||
limit = parseInt(limit || MAX_LIMIT)
|
||||
if (page < 0) {
|
||||
page = 0
|
||||
}
|
||||
const start = page * limit
|
||||
const end = start + limit - 1
|
||||
let records = await new RedisClient().zrevrange(`${activity}:score`, start, end)
|
||||
let results: any = []
|
||||
for (let i = 0; i < records.length; i+=2) {
|
||||
let id = records[i]
|
||||
let score = parseInt(records[i + 1])
|
||||
let user = await ActivityUser.findById(id)
|
||||
results.push({
|
||||
rank: start + i / 2 + 1,
|
||||
address: user.address,
|
||||
score
|
||||
})
|
||||
|
@ -82,31 +82,31 @@ const parseNextTask = async (
|
||||
}
|
||||
export default class TasksController extends BaseController {
|
||||
|
||||
@role(ROLE_ANON)
|
||||
@router('get /api/tasks/list')
|
||||
async taskList(req) {
|
||||
const list: {id: string, name: string}[] = []
|
||||
for (let [id, task] of allTasks) {
|
||||
if (task.show) {
|
||||
list.push({id, name: task.desc})
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
@router('get /api/tasks/progress')
|
||||
async taskProgress(req) {
|
||||
let user = req.user;
|
||||
let activity = req.activity;
|
||||
if (!user.taskProgress || user.taskProgress.length === 0) {
|
||||
for (let task of activity.tasks) {
|
||||
if (allTasks.has(task.task)) {
|
||||
user.taskProgress.push({id: task.task, status: 0})
|
||||
if (allTasks.has(task.id)) {
|
||||
user.taskProgress.push({id: task.id, status: TaskStatusEnum.NOT_START})
|
||||
}
|
||||
}
|
||||
await user.save();
|
||||
}
|
||||
return user.taskProgress
|
||||
let visibleTasks = new Set();
|
||||
for (let task of activity.tasks) {
|
||||
if (task.show) {
|
||||
visibleTasks.add(task.id)
|
||||
}
|
||||
}
|
||||
let taskProgress = [];
|
||||
for (let task of user.taskProgress) {
|
||||
if (visibleTasks.has(task.id)) {
|
||||
taskProgress.push(task)
|
||||
}
|
||||
}
|
||||
return taskProgress
|
||||
}
|
||||
|
||||
|
||||
|
@ -8,7 +8,13 @@ import { BaseModule } from './Base'
|
||||
@modelOptions({ schemaOptions: { _id: false }, options: { allowMixed: Severity.ALLOW }, })
|
||||
export class TaskCfg {
|
||||
@prop()
|
||||
task: string
|
||||
id: string
|
||||
@prop()
|
||||
title: string
|
||||
@prop()
|
||||
desc: string
|
||||
@prop({default: true})
|
||||
show: boolean
|
||||
@prop({ type: mongoose.Schema.Types.Mixed })
|
||||
params: any
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ export default class DiscordRole extends ITask {
|
||||
static show: boolean = true
|
||||
async execute(data: any) {
|
||||
let task = this.params.user.taskProgress.find(t => t.id === this.constructor.name)
|
||||
let cfg = this.params.activity.tasks.find(t => t.task === this.constructor.name)
|
||||
let cfg = this.params.activity.tasks.find(t => t.id === this.constructor.name)
|
||||
let time = cfg.params.time;
|
||||
if (Date.now() - task.timeStart < time * 1000) {
|
||||
throw new ZError(11, 'check discord role failed')
|
||||
|
@ -7,7 +7,7 @@ export default class TwitterFollow extends ITask {
|
||||
static show: boolean = true
|
||||
async execute(data: any) {
|
||||
let task = this.params.user.taskProgress.find(t => t.id === this.constructor.name)
|
||||
let cfg = this.params.activity.tasks.find(t => t.task === this.constructor.name)
|
||||
let cfg = this.params.activity.tasks.find(t => t.id === this.constructor.name)
|
||||
let time = cfg.params.time;
|
||||
if (Date.now() - task.timeStart < time * 1000) {
|
||||
throw new ZError(11, 'follow failed')
|
||||
|
@ -7,7 +7,7 @@ export default class TwitterRetweet extends ITask {
|
||||
static show: boolean = true
|
||||
async execute(data: any) {
|
||||
let task = this.params.user.taskProgress.find(t => t.id === this.constructor.name)
|
||||
let cfg = this.params.activity.tasks.find(t => t.task === this.constructor.name)
|
||||
let cfg = this.params.activity.tasks.find(t => t.id === this.constructor.name)
|
||||
let time = cfg.params.time;
|
||||
if (Date.now() - task.timeStart < time * 1000) {
|
||||
throw new ZError(11, 'retweet failed')
|
||||
|
@ -35,7 +35,7 @@ export default class UpdateScore extends ITask {
|
||||
static auto: boolean = true
|
||||
async execute(data: any) {
|
||||
let task = this.params.user.taskProgress.find((t: TaskStatus) => t.id === this.constructor.name)
|
||||
let cfg = this.params.activity.tasks.find((t: TaskCfg) => t.task === this.constructor.name)
|
||||
let cfg = this.params.activity.tasks.find((t: TaskCfg) => t.id === this.constructor.name)
|
||||
let scores = cfg.params.score;
|
||||
task.status = TaskStatusEnum.SUCCESS
|
||||
task.timeFinish = Date.now()
|
||||
|
Loading…
x
Reference in New Issue
Block a user