Files
ZYZ/shared/db/PvpSaveData.ts
2022-12-08 15:36:55 +08:00

39 lines
1.5 KiB
TypeScript

import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { DefenseHeroInSaveData, } from '../domain/battleField/pvp';
@index({ roleId: 1, warId: 1 })
export default class PvpSaveData extends BaseModel {
@prop({ required: true })
roleId: string; // 角色 id
@prop({ required: true })
warId: number; // 关卡id
@prop({ required: true })
buff: number; // 地图buff
@prop({ required: true, default: [], _id: false, type: DefenseHeroInSaveData })
heroes: DefenseHeroInSaveData[];
public static async createSaveData(roleId: string, warId: number, buff: number, heroes: DefenseHeroInSaveData[]) {
const result: PvpSaveDataType = await PvpSaveDataModel.findOneAndUpdate({ roleId, warId }, { $set: { buff, heroes } }, { new: true, upsert: true }).lean();
return result;
}
public static async findByRoleId(roleId: string) {
const result: PvpSaveDataType[] = await PvpSaveDataModel.find({ roleId }).lean();
return result;
}
public static async removeBySub(roleId: string, subHid: number) {
await PvpSaveDataModel.updateMany({ roleId }, { $pull: { heroes: { actorId: subHid } } });
}
}
export const PvpSaveDataModel = getModelForClass(PvpSaveData);
export interface PvpSaveDataType extends Pick<DocumentType<PvpSaveData>, keyof PvpSaveData> { };
export type pvpSaveDataUpdate = Partial<PvpSaveDataType>;