格式化score返回

This commit is contained in:
CounterFire2023 2024-04-15 17:13:09 +08:00
parent ea8dae5ae7
commit 95e6f81713
8 changed files with 45 additions and 33 deletions

View File

@ -59,3 +59,5 @@ export const SCORE_ENHANCE_CHEST_GIFT = 'enhance_chest_gift'
// google reCaptcha最小分数
export const RECAPTCHA_MIN_SCORE = 0.5
// 排行榜分数缩放系数
export const RANK_SCORE_SCALE = 100

View File

@ -7,3 +7,13 @@ export const isObjectIdString = (str: string) => {
export const isValidShareCode = (str: string) => {
return /^[3fBCM8j17XNA9xYun4wmLWep2oHFlhPcgyEJskqOz6GK0UtV5ZRaDSvrTbidQI]{10}$/.test(str)
}
export const formatNumShow = (num: number) => {
if (num >= 10) {
return num.toString()
} else if (num === 0) {
return '0'
} else {
return num.toFixed(1)
}
}

View File

@ -4,8 +4,9 @@ import { rankKey, rankLevel } from 'services/rank.svr'
import { BaseController, ROLE_ANON, SyncLocker, ZError, ZRedisClient, role, router } from 'zutils'
import { ScoreRecord } from 'models/ScoreRecord'
import { formatAddress } from 'zutils/utils/chain.util'
import { isValidShareCode } from 'common/Utils'
import { formatNumShow, isValidShareCode } from 'common/Utils'
import { checkReCaptcha } from 'services/google.svr'
import { RANK_SCORE_SCALE } from 'common/Constants'
const MAX_LIMIT = 100
export default class ActivityController extends BaseController {
@ -93,15 +94,15 @@ export default class ActivityController extends BaseController {
for (let u of users) {
const totalScore = await new ZRedisClient().zscore(totalKey, u.id)
const inviteScore = await new ZRedisClient().zscore(keyInvite, `${user.id}_${u.id}`)
const score = totalScore ? parseInt(totalScore + '') : 0
const scoreInvite = inviteScore ? parseInt(inviteScore + '') / 100 : 0
const score = totalScore ? parseInt(totalScore + '') / RANK_SCORE_SCALE : 0
const scoreInvite = inviteScore ? parseInt(inviteScore + '') / RANK_SCORE_SCALE : 0
results.push({
// user: u.id,
level: rankLevel(score),
nickname: u.twitterName || u.discordName || formatAddress(u.address),
avatar: u.twitterAvatar || '',
score,
scoreInvite,
score: formatNumShow(score),
scoreInvite: formatNumShow(scoreInvite),
})
}
return results
@ -116,7 +117,7 @@ export default class ActivityController extends BaseController {
const records = await ScoreRecord.find({ user: user.id, activity: user.activity })
return records.map(record => {
return {
score: record.score,
score: formatNumShow(record.score),
type: record.type,
//@ts-ignore
time: record.createdAt.getTime(),
@ -138,16 +139,8 @@ export default class ActivityController extends BaseController {
// const yesterdayKey = rankKey(activity, yesterday())
for (let i = 0; i < records.length; i += 2) {
const id = records[i]
let score = parseInt(records[i + 1])
let score = formatNumShow(parseInt(records[i + 1]) / RANK_SCORE_SCALE)
const user = await ActivityUser.findById(id)
// let invite = ''
// if (user?.inviteUser) {
// const inviteUser = await ActivityUser.findById(user.inviteUser)
// if (inviteUser) {
// invite = inviteUser.address
// }
// }
// const yesterdayScore = await new ZRedisClient().zscore(yesterdayKey, id)
const rank = start + i / 2 + 1
results.push({
rank,

View File

@ -14,7 +14,7 @@ import {
SCORE_OPEN_CHEST,
} from 'common/Constants'
import { formatAddress } from 'zutils/utils/chain.util'
import { isObjectIdString, isValidShareCode } from 'common/Utils'
import { formatNumShow, isObjectIdString, isValidShareCode } from 'common/Utils'
import { checkReCaptcha } from 'services/google.svr'
import { GeneralScription } from 'models/chain/GeneralScription'
import { ChestEnhanceRecord } from 'models/ChestEnhanceRecord'
@ -89,7 +89,7 @@ class BoxController extends BaseController {
result.push({
nickname: u?.twitterName || u?.discordName || u?.address ? formatAddress(u.address) : 'unknown',
avatar: u?.twitterAvatar || '',
score: score,
score: formatNumShow(score),
// @ts-ignore
time: records[i].createdAt.getTime(),
})
@ -114,7 +114,7 @@ class BoxController extends BaseController {
result.push({
nickname: u?.twitterName || u?.discordName || u?.address ? formatAddress(u.address) : 'unknown',
avatar: u?.twitterAvatar || '',
score: score,
score: formatNumShow(score),
// @ts-ignore
time: records[i].createdAt.getTime(),
})
@ -345,7 +345,7 @@ class BoxController extends BaseController {
})
await chest.save()
return { score, items }
return { score: formatNumShow(score), items }
}
/**
@ -360,7 +360,7 @@ class BoxController extends BaseController {
return records.map(record => {
return {
chest: record.data.chestId,
score: record.score,
score: formatNumShow(record.score),
level: record.data.level,
// @ts-ignore
time: record.createdAt.getTime(),

View File

@ -1,17 +1,17 @@
import { MANUAL_OPEN_GAME, RESET_STEP, SCORE_GAME_STEP } from 'common/Constants'
import { MANUAL_OPEN_GAME, SCORE_GAME_STEP } from 'common/Constants'
import { ActivityGame } from 'models/ActivityGame'
import { DAILY_SIGN, SIGN_SEQ, SIGN_TOTAL, TicketRecord, USE_TICKET } from 'models/TicketRecord'
import { queryCheckInList } from 'services/chain.svr'
import { checkInToday, seqSignCfg, seqSignScore, totalSignCfg, totalSignScore } from 'services/sign.svr'
import { ZError, SyncLocker, BaseController, router } from 'zutils'
import { formatDate } from 'utils/utcdate.util'
import { generateChestLevel, generateNewChest, generateStepReward } from 'services/game.svr'
import { ChestStatusEnum } from 'models/ActivityChest'
import { generateStepReward } from 'services/game.svr'
import { updateRankScore } from 'services/rank.svr'
import { ExploreRecord } from 'models/ExploreRecord'
import { isObjectId } from 'zutils/utils/string.util'
import { GeneralScription } from 'models/chain/GeneralScription'
import { CheckIn } from 'models/chain/CheckIn'
import { formatNumShow } from 'common/Utils'
/**
*
@ -386,6 +386,6 @@ class GameController extends BaseController {
}
await ticketRecord.save()
return { score, chests: chests.map(chest => chest.toJson()) }
return { score: formatNumShow(score), chests: chests.map(chest => chest.toJson()) }
}
}

View File

@ -11,8 +11,14 @@ import { checkParamsNeeded } from 'zutils/utils/net.util'
import { aesDecrypt } from 'zutils/utils/security.util'
import { base58ToHex } from 'zutils/utils/string.util'
import { ActivityGame } from 'models/ActivityGame'
import { MAX_ENHANCE_COUNT_ADV, MAX_ENHANCE_COUNT_BASE, SCORE_INVITE_USER, SCORE_SOCIAL_TASK } from 'common/Constants'
import { isObjectIdString } from 'common/Utils'
import {
MAX_ENHANCE_COUNT_ADV,
MAX_ENHANCE_COUNT_BASE,
RANK_SCORE_SCALE,
SCORE_INVITE_USER,
SCORE_SOCIAL_TASK,
} from 'common/Constants'
import { formatNumShow, isObjectIdString } from 'common/Utils'
import { ChestEnhanceRecord } from 'models/ChestEnhanceRecord'
const LOGIN_TIP = 'This signature is just to verify your identity'
@ -138,13 +144,13 @@ class SignController extends BaseController {
twitterAvatar: user.twitterAvatar,
discordId: user.discordId,
discordName: user.discordName,
scoreToday: todayScore ? parseInt(todayScore + '') : 0,
scoreTotal: totalScore ? parseInt(totalScore + '') : 0,
scoreToday: formatNumShow(todayScore ? parseInt(todayScore + '') / RANK_SCORE_SCALE : 0),
scoreTotal: formatNumShow(totalScore ? parseInt(totalScore + '') / RANK_SCORE_SCALE : 0),
rankTotal: totalRank ? totalRank : '-',
invite,
inviteCount: records.length,
inviteScore,
scoreSocial,
scoreSocial: formatNumShow(scoreSocial),
code: user.inviteCode,
mapopen: gameRecord.status,
enhanceCount,

View File

@ -7,6 +7,7 @@ import { GeneralScription } from 'models/chain/GeneralScription'
import { BASE_TASK_TICKET } from 'common/Constants'
import { BASE_TASK_REWARD, SIGN_SEQ, TicketRecord } from 'models/TicketRecord'
import { ActivityGame } from 'models/ActivityGame'
import { formatNumShow } from 'common/Utils'
const fs = require('fs')
const prod = process.env.NODE_ENV === 'production'
@ -230,6 +231,6 @@ export default class TasksController extends BaseController {
await ActivityGame.updateOne({ user: user.id, activity: user.activity }, { $inc: { tickets: ticket } })
await ticketRecord.save()
}
return { status: currentTask.status, score, ticket }
return { status: currentTask.status, score: formatNumShow(score), ticket }
}
}

View File

@ -1,4 +1,4 @@
import { INVITE_REBATE, INVITE_REBATE_LEVEL, SCORE_INVITE_REBATE } from 'common/Constants'
import { INVITE_REBATE, INVITE_REBATE_LEVEL, RANK_SCORE_SCALE, SCORE_INVITE_REBATE } from 'common/Constants'
import { ActivityUser } from 'models/ActivityUser'
import { ScoreRecord } from 'models/ScoreRecord'
import { ZRedisClient } from 'zutils'
@ -49,7 +49,7 @@ export const updateRankScore = async ({
const score1 = score * INVITE_REBATE
let scoreParams1 = Object.assign({ fromUser: user }, scoreParams)
const keyInvite = `${activity}:invite`
await updateRankInvite(keyInvite, parseInt(score1 * 100 + ''), `${userMod.inviteUser}_${user}`)
await updateRankInvite(keyInvite, parseInt(score1 * RANK_SCORE_SCALE + ''), `${userMod.inviteUser}_${user}`)
await updateRankScore({
user: userMod.inviteUser,
score: score1,
@ -74,7 +74,7 @@ const updateRank = async (key: string, score: number, member: string) => {
scoreSaved = scoreSaved.substring(0, scoreSaved.indexOf('.'))
}
let scoreOld = parseInt(scoreSaved || '0')
score = score + scoreOld
score = score * RANK_SCORE_SCALE + scoreOld
const scoreToSave = score + 1 - Date.now() / 1000 / 10000000000
await new ZRedisClient().zadd(key, scoreToSave, member)
}