名将擂台:修改时间精度和debug接口
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, mongoose, Ref } from '@typegoose/typegoose';
|
||||
import { LadderDefense, LadderOppPlayerInDB, LadderOppPlayerInfo } from '../domain/battleField/ladder';
|
||||
import { LadderDefense, LadderOppPlayerInDB } from '../domain/battleField/ladder';
|
||||
import Role from './Role';
|
||||
|
||||
@index({ roleId: 1 })
|
||||
@@ -41,6 +41,15 @@ export default class LadderMatch extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByRank(rank: number) {
|
||||
const result: LadderMatchType = await LadderMatchModel.findOne({ rank }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async isRankExist(rank: number) {
|
||||
const result = await LadderMatchModel.exists({ rank });
|
||||
return result;
|
||||
}
|
||||
public static async findByRoleIdAndInclude(roleId: string) {
|
||||
const result: LadderMatchType = await LadderMatchModel.findOne({ roleId })
|
||||
.populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt')
|
||||
@@ -96,19 +105,20 @@ export default class LadderMatch extends BaseModel {
|
||||
return defense;
|
||||
}
|
||||
|
||||
public static async changeRank(isSuccess: boolean, attackInfo: LadderOppPlayerInfo, defenseInfo: LadderOppPlayerInfo, times = 0) {
|
||||
public static async changeRank(isSuccess: boolean, attackInfo: { roleId: string }, defenseInfo: { isRobot: boolean, roleId: string, oldRank: number }, times = 0) {
|
||||
if(times > 10) return { isChange: false }
|
||||
const session = await mongoose.connection.startSession();
|
||||
session.startTransaction()
|
||||
|
||||
try {
|
||||
|
||||
let newAtkLadderMatch: LadderMatchType, newDefLadderMatch: LadderMatchType, isChange = false;
|
||||
let newAtkLadderMatch: LadderMatchType, newDefLadderMatch: LadderMatchType, isChange = false, endTime = Date.now();
|
||||
if(defenseInfo.isRobot) {
|
||||
let atkLadderMatch = await LadderMatchModel.findOne({ roleId: attackInfo.roleId }).lean();
|
||||
if(isSuccess && atkLadderMatch && (atkLadderMatch.rank == 0 || atkLadderMatch.rank > defenseInfo.oldRank)) {
|
||||
newAtkLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: attackInfo.roleId }, { $set: { rank: defenseInfo.oldRank, oldRank: atkLadderMatch.rank } }, { new: true }).lean();
|
||||
isChange = true;
|
||||
endTime = Date.now();
|
||||
} else {
|
||||
newAtkLadderMatch = atkLadderMatch;
|
||||
}
|
||||
@@ -119,13 +129,14 @@ export default class LadderMatch extends BaseModel {
|
||||
newAtkLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: attackInfo.roleId }, { $set: { rank: defLadderMatch.rank, oldRank: atkLadderMatch.rank } }, { new: true }).lean();
|
||||
newDefLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: defenseInfo.roleId }, { $set: { rank: atkLadderMatch.rank, oldRank: defLadderMatch.rank } }, { new: true }).lean();
|
||||
isChange = true;
|
||||
endTime = Date.now();
|
||||
} else {
|
||||
newAtkLadderMatch = atkLadderMatch;
|
||||
newDefLadderMatch = defLadderMatch;
|
||||
}
|
||||
}
|
||||
await session.commitTransaction()
|
||||
return { isChange, atkLadderMatch: newAtkLadderMatch, defLadderMatch: newDefLadderMatch }
|
||||
return { isChange, atkLadderMatch: newAtkLadderMatch, defLadderMatch: newDefLadderMatch, endTime }
|
||||
} catch(e) {
|
||||
return await this.changeRank(isSuccess, attackInfo, defenseInfo, times + 1);
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user