feat(gvgBattle): 添加部分保存阵容、进出城池等接口的逻辑

This commit is contained in:
liangtongchuan
2023-02-05 22:53:45 +08:00
committed by luying
parent 3fc6b91a51
commit 596e6e18cf
8 changed files with 197 additions and 29 deletions

View File

@@ -34,8 +34,14 @@ export default class GVGCity extends BaseModel {
}
// 通过 cityId 获取城市
public static async getCityByCityId(cityId: number) {
const city: GVGCityType | null = await GVGCityModel.findOne({ cityId }).lean();
public static async getCityByCityId(configId: number, cityId: number) {
const city: GVGCityType | null = await GVGCityModel.findOne({ configId, cityId }).lean();
return city;
}
// 更新城市字段
public static async updateCityUser(configId: number, cityId: number, userInc: number, teamInc: number) {
const city: GVGCityType | null = await GVGCityModel.findOneAndUpdate({ configId, cityId}, { $inc: {userCnt: userInc, teamCnt: teamInc} }, { new: true }).lean();
return city;
}
}
@@ -45,4 +51,7 @@ export const GVGCityModel = getModelForClass(GVGCity);
export interface GVGCityType extends Pick<DocumentType<GVGCity>, keyof GVGCity> {
id: number;
};
};
export type GVGCityUpdate = Partial<GVGCityType>; // 将所有字段变成可选项

View File

@@ -2,6 +2,7 @@
import BaseModel from "./BaseModel";
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { genCode } from "../pubUtils/util";
import { LineupHero } from './../domain/roleField/hero';
@index({ roleId: 1, teamId: 1 })
@index({ teamCode: 1 })
@@ -52,20 +53,44 @@ export default class GVGTeam extends BaseModel {
defenseTime: number; // 防守保护时间
@prop({ required: true })
lineup: [{
actorId: number; // 武将id
dataId: number; // 位置
order: number; // 进攻顺序
}]
lineup: [LineupHero]
// 创建队伍
public static async createTeam(roleId: string, leagueCode: string, teamId: number, head: number, spine: number, frame: number, lineup: any) {
public static async createTeam(roleId: string, leagueCode: string, teamId: number, head: number, spine: number, frame: number, lineup: [LineupHero]) {
const doc = new GVGTeamModel();
const teamCode = genCode(8);
let update = Object.assign(doc.toJSON(), { roleId, leagueCode, teamId, teamCode, head, spine, frame, lineup });
const update = Object.assign(doc.toJSON(), { roleId, leagueCode, teamId, teamCode, head, spine, frame, lineup });
const team: GVGTeamType | null = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $setOnInsert: update }, { upsert: true, new: true }).lean();
return team;
}
// 保存队伍
public static async saveTeam(roleId: string, leagueCode: string, teamId: number, head: number, spine: number, frame: number, lineup: [LineupHero]) {
let team: GVGTeamType = await GVGTeamModel.findOne({ roleId, teamId }).lean();
if (!team) {
team = await this.createTeam(roleId, leagueCode, teamId, head, spine, frame, lineup);
return team;
}
const update = { head, spine, frame };
if (lineup && lineup.length > 0) {
update['lineup'] = lineup;
}
team = await GVGTeamModel.findOneAndUpdate({ roleId, teamId }, { update }, { new: true }).lean();
return team;
}
// 查找角色队伍数
public static async getTeamCnt(roleId: string) {
const teams: GVGTeamType[] = await GVGTeamModel.find({ roleId }).select('teamCode').lean();
return teams.length;
}
// 玩家切换城池更新队伍信息
public static async resetTeamsLoc(roleId: string, cityId: number, areaId: number) {
const res = await GVGTeamModel.updateMany({ roleId }, { cityId, areaId, pointId: 0 }).lean();
return !!res['ok'];
}
}
export const GVGTeamModel = getModelForClass(GVGTeam);

View File

@@ -76,6 +76,8 @@ export default class GVGUserData extends BaseModel {
@prop({ required: true, default: 0 })
protectTime: number; // 保护期
@prop({ required: false })
cityId: number; // 城池id
public static async findByRole(configId: number, leagueCode: string, roleId: string) {
const result: GVGUserDataType = await GVGUserDataModel.findOneAndUpdate({ configId, leagueCode, roleId }, {}, { new: true, upsert: true}).lean();
@@ -121,6 +123,12 @@ export default class GVGUserData extends BaseModel {
const result: GVGUserDataType = await GVGUserDataModel.findOneAndUpdate({ configId, leagueCode, roleId }, { $set: { lv }}, { new: true }).lean();
return result;
}
// 更换城池
public static async changeCity(configId: number, leagueCode: string, roleId: string, cityId: number) {
const result: GVGUserDataType = await GVGUserDataModel.findOneAndUpdate({ configId, leagueCode, roleId }, { $set: { cityId }}, { new: true }).lean();
return result;
}
}
export const GVGUserDataModel = getModelForClass(GVGUserData);