diff --git a/docs/uaw.md b/docs/uaw.md index 52f58c9..2712f78 100644 --- a/docs/uaw.md +++ b/docs/uaw.md @@ -721,8 +721,8 @@ body: ```js { - "code": "1123", // 宝箱的分享code, code和id选择传一个, 如果两个都传, 优先使用id来查询箱子 - "id": "123123" + "code": "1123", // 宝箱的分享code, code和chestId选择传一个, 如果两个都传, 优先使用chestId来查询箱子 + "chestId": "123123" } ``` diff --git a/src/controllers/chest.controller.ts b/src/controllers/chest.controller.ts index 7e0ef1d..a46fe8d 100644 --- a/src/controllers/chest.controller.ts +++ b/src/controllers/chest.controller.ts @@ -71,18 +71,15 @@ class BoxController extends BaseController { if (chest.status === 0) { throw new ZError(13, 'chest is locked') } - if (chest.status === 9) { - throw new ZError(14, 'chest had been opened') - } const result = [] - const users = await ActivityUser.find({ _id: { $in: chest.bonusUsers } }) + const records = await ChestEnhanceRecord.find({ chest: chest.id, activity: user.activity }).sort({ score: -1 }) + const uids = records.map(record => record.user) + const users = await ActivityUser.find({ _id: { $in: uids } }) const userMap = new Map() - const totalKey = rankKey(user.activity) users.forEach(u => userMap.set(u.id, u)) - for (let i = 0; i < chest.bonusUsers.length; i++) { - const u = userMap.get(chest.bonusUsers[i]) - const totalScore = await new ZRedisClient().zscore(totalKey, u.id) - const score = totalScore ? parseInt(totalScore + '') : 0 + for (let i = 0; i < records.length; i++) { + const u = userMap.get(records[i].user) + const score = records[i].score result.push({ nickname: u?.twitterName || u?.discordName || u?.address ? formatAddress(u.address) : 'unknown', level: rankLevel(score), @@ -96,20 +93,20 @@ class BoxController extends BaseController { */ @router('post /api/chest/enhance/state') async enhanceState(req) { - const { code, id } = req.params + const { code, chestId } = req.params const user = req.user if (code && !isValidShareCode(code)) { throw new ZError(11, 'invalid share code') } - if (id && !isObjectIdString(id)) { + if (chestId && !isObjectIdString(chestId)) { throw new ZError(11, 'invalid chest id') } - if (!code && !id) { + if (!code && !chestId) { throw new ZError(11, 'must provide share code or chest id') } let chest: any - if (id) { - chest = await ActivityChest.findById(id) + if (chestId) { + chest = await ActivityChest.findById(chestId) } else { chest = await ActivityChest.findOne({ shareCode: code, activity: user.activity }) } @@ -189,7 +186,7 @@ class BoxController extends BaseController { { _id: chest.id }, { $inc: { scoreBonus: score }, - $push: { bonusUsers: uid, bonusScores: score }, + $push: { bonusUsers: uid }, }, ) const enhanceRecord = new ChestEnhanceRecord({