✨ feat(gvg): 征战中原锁定对手

This commit is contained in:
luying
2023-02-17 10:58:06 +08:00
parent 4035645772
commit b727249106
12 changed files with 635 additions and 36 deletions
+59
View File
@@ -0,0 +1,59 @@
// 征战中原对手锁
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getZeroPoint, nowSeconds } from '../pubUtils/timeUtil';
import { GVG } from '../pubUtils/dicParam';
@index({ day: 1, groupId: 1, vestigeId: 1, rank: 1 })
export default class GVGVestigeLock extends BaseModel {
@prop({ required: true })
configId: number; // 赛期
@prop({ required: true })
day: number; // 每天5点
@prop({ required: true })
groupId: number; // 战区id
@prop({ required: true })
vestigeId: number; // 遗迹id
@prop({ required: true })
rank: number; // 排名
@prop({ required: true })
unlockTime: number; // 锁定到什么时候
@prop({ required: true })
attackRoleId: string; // 锁定到什么时候
@prop({ required: true })
defenseRoleId: string; // 锁定到什么时候
public static async chooseOppLock(groupId: number, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string ) {
return await this.lock(groupId, vestigeId, rank, configId, attackRoleId, defenseRoleId, nowSeconds() + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN);
}
private static async lock(groupId: number, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string, unlockTime: number) {
let day = getZeroPoint();
await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, vestigeId, rank }, { $setOnInsert: { configId, unlockTime: 0 } }, { upsert: true });
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({
day, groupId, vestigeId, rank, unlockTime: { $lt: nowSeconds() }
}, { $set: { unlockTime, attackRoleId, defenseRoleId } }, { new: true }).lean();
return result;
}
public static async releaseLock(groupId: number, vestigeId: number, rank: number) {
let day = getZeroPoint();
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, vestigeId, rank }, { $set: { unlockTime: 0 } }, { new: true }).lean();
return result;
}
}
export const GVGVestigeLockModel = getModelForClass(GVGVestigeLock);
export interface GVGVestigeLockType extends Pick<DocumentType<GVGVestigeLock>, keyof GVGVestigeLock> {
id: number;
};
export type GVGVestigeLockUpdate = Partial<GVGVestigeLockType>; // 将所有字段变成可选项