名将擂台:添加事务

This commit is contained in:
luying
2022-07-19 17:14:11 +08:00
parent d9f6174900
commit 4d81de52d7
+28 -17
View File
@@ -93,25 +93,36 @@ export default class LadderMatch extends BaseModel {
return defense; return defense;
} }
public static async changeRank(isSuccess: boolean, attackInfo: LadderOppPlayerInfo, defenseInfo: LadderOppPlayerInfo) { public static async changeRank(isSuccess: boolean, attackInfo: LadderOppPlayerInfo, defenseInfo: LadderOppPlayerInfo, times = 0) {
// TODO transaction if(times > 10) return { isChange: false }
let atkLadderMatch: LadderMatchType, defLadderMatch: LadderMatchType, isChange = false; const session = await mongoose.connection.startSession();
if(defenseInfo.isRobot) { session.startTransaction()
atkLadderMatch = await LadderMatchModel.findOne({ roleId: attackInfo.roleId }).lean();
if(isSuccess && atkLadderMatch && atkLadderMatch.rank > defenseInfo.oldRank) { try {
atkLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: attackInfo.roleId }, { $set: { rank: defenseInfo.oldRank, oldRank: atkLadderMatch.rank } }, { new: true }).lean();
isChange = true; let atkLadderMatch: LadderMatchType, defLadderMatch: LadderMatchType, isChange = false;
} if(defenseInfo.isRobot) {
} else { atkLadderMatch = await LadderMatchModel.findOne({ roleId: attackInfo.roleId }).lean();
atkLadderMatch = await LadderMatchModel.findOne({ roleId: attackInfo.roleId }).lean(); if(isSuccess && atkLadderMatch && atkLadderMatch.rank > defenseInfo.oldRank) {
defLadderMatch = await LadderMatchModel.findOne({ roleId: defenseInfo.roleId }).lean(); atkLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: attackInfo.roleId }, { $set: { rank: defenseInfo.oldRank, oldRank: atkLadderMatch.rank } }, { new: true }).lean();
if(isSuccess && atkLadderMatch && defLadderMatch && atkLadderMatch.rank > defLadderMatch.rank) { isChange = true;
atkLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: attackInfo.roleId }, { $set: { rank: defLadderMatch.rank, oldRank: atkLadderMatch.rank } }, { new: true }).lean(); }
defLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: defenseInfo.roleId }, { $set: { rank: atkLadderMatch.rank, oldRank: defLadderMatch.rank } }, { new: true }).lean(); } else {
isChange = true; atkLadderMatch = await LadderMatchModel.findOne({ roleId: attackInfo.roleId }).lean();
defLadderMatch = await LadderMatchModel.findOne({ roleId: defenseInfo.roleId }).lean();
if(isSuccess && atkLadderMatch && defLadderMatch && atkLadderMatch.rank > defLadderMatch.rank) {
atkLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: attackInfo.roleId }, { $set: { rank: defLadderMatch.rank, oldRank: atkLadderMatch.rank } }, { new: true }).lean();
defLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: defenseInfo.roleId }, { $set: { rank: atkLadderMatch.rank, oldRank: defLadderMatch.rank } }, { new: true }).lean();
isChange = true;
}
} }
await session.commitTransaction()
return { isChange, atkLadderMatch, defLadderMatch }
} catch(e) {
return await this.changeRank(isSuccess, attackInfo, defenseInfo, times + 1);
} finally {
session.endSession()
} }
return { isChange, atkLadderMatch, defLadderMatch }
} }
} }