From 3a2547d3ffb157741892a8490cfe8a55ec80a462 Mon Sep 17 00:00:00 2001 From: zhangxk Date: Wed, 13 Sep 2023 16:13:53 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(=E7=A8=B7=E4=B8=8B=E5=AD=A6?= =?UTF-8?q?=E5=AE=AB):=20=E4=BF=AE=E6=94=B9=E5=A4=96=E5=B8=A6=E5=A5=96?= =?UTF-8?q?=E5=8A=B1=E6=AC=A1=E6=95=B0=E6=AF=8F=E6=97=A5=E6=B8=85=E9=9B=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/db/RougelikeScore.ts | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/shared/db/RougelikeScore.ts b/shared/db/RougelikeScore.ts index 47d6bee12..868853a75 100644 --- a/shared/db/RougelikeScore.ts +++ b/shared/db/RougelikeScore.ts @@ -1,7 +1,7 @@ import BaseModel from './BaseModel'; import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose'; -import { getZeroPointD } from '../pubUtils/timeUtil'; +import { getZeroPoint, getZeroPointD } from '../pubUtils/timeUtil'; import { SHOP_REFRESH_TYPE } from '../consts'; @index({ roleId: 1, refTime: 1 }) @@ -23,17 +23,26 @@ export default class RougelikeScore extends BaseModel { receiveNum: number; // 已领取的id @prop({ required: true, default: 0 }) - takeoutRewardCnt: number; // 额外奖励已领取的次数 + takeoutRewardCnt: number; // 额外奖励已领取的次数(每日) + + @prop({ required: true, default: () => new Date() }) + refDaily: Date; public static async findByRoleId(roleId: string) { let refTime = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY); let result: RougelikeScoreType = await RougelikeScoreModel.findOne({ roleId, refTime }).lean(); + + let today = getZeroPointD(); + if (result && result.refDaily) { + result = await RougelikeScoreModel.findOneAndUpdate({ roleId, refTime, refDaily: { $lt: today } }, { $set: { takeoutRewardCnt: 0, refDaily: new Date() }, $setOnInsert: { received: [], receiveNum: 0, score: 0 } }, { new: true }).lean(); + } return result; } public static async incScore(roleId: string, score: number) { let refTime = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY); - let result: RougelikeScoreType = await RougelikeScoreModel.findOneAndUpdate({ roleId, refTime }, { $inc: { score }, $setOnInsert: { received: [], receiveNum: 0, takeoutRewardCnt: 0 } }, { new: true, upsert: true }).lean(); + let result: RougelikeScoreType = await RougelikeScoreModel.findOneAndUpdate({ roleId, refTime }, { $inc: { score }, $setOnInsert: { received: [], receiveNum: 0, takeoutRewardCnt: 0, refDaily: new Date() } }, { new: true, upsert: true }).lean(); + return result; } @@ -57,10 +66,10 @@ export default class RougelikeScore extends BaseModel { await RougelikeScoreModel.updateMany({ _id: { $in: _ids } }, { $set: { receiveNum: maxNum } }); } - public static async receiveTakeoutReward(roleId: string, maxNum: number) { + public static async receiveTakeoutReward(roleId: string, maxNum: number, refDaily = new Date()) { let refTime = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY); - await RougelikeScoreModel.findOneAndUpdate({ roleId, refTime }, { $setOnInsert: { score: 0, received: [], receiveNum: 0, takeoutRewardCnt: 0 } }, { upsert: true }); - let result: RougelikeScoreType = await RougelikeScoreModel.findOneAndUpdate({ roleId, refTime, takeoutRewardCnt: { $lt: maxNum } }, { $inc: { takeoutRewardCnt: 1 } }, { new: true }).lean(); + await RougelikeScoreModel.findOneAndUpdate({ roleId, refTime }, { $setOnInsert: { score: 0, received: [], receiveNum: 0, takeoutRewardCnt: 0, refDaily } }, { upsert: true }); + let result: RougelikeScoreType = await RougelikeScoreModel.findOneAndUpdate({ roleId, refTime, takeoutRewardCnt: { $lt: maxNum } }, { $set: { refDaily }, $inc: { takeoutRewardCnt: 1 } }, { new: true }).lean(); return result; } @@ -72,8 +81,6 @@ export default class RougelikeScore extends BaseModel { return { updateOne: { filter: { roleId, refTime }, update: { $set: { ...param } }, upsert: true } } })) } - - } export const RougelikeScoreModel = getModelForClass(RougelikeScore);