Files
ZYZ/shared/db/PvpHistoryOpp.ts
2021-02-04 13:57:58 +08:00

70 lines
2.9 KiB
TypeScript

import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { PvpEnemies, PvpOtherHeroes } from '../domain/dbGeneral';
export class HeroScores {
@prop({ required: true })
hid: number;
@prop({ required: true })
score: number;
}
@index({ roleId: 1 })
export default class PvpHistoryOpp extends BaseModel {
@prop({ required: true })
roleId: string; // 玩家id
@prop({ required: true })
pos: number; // 对手位置
@prop({ required: true })
oppRoleId: string; // 对手角色 id
@prop({ required: true })
roleName: string; // 角色名称
@prop({ required: true, default: 19 })
headHid: number; // 对手头像
@prop({ required: true, default: 19 })
sHid: number; // 对手形象
@prop({ required: true, default: 0 })
score: number; // 对手军功
@prop({ required: true, default: 1 })
pLv: number; // 对手等级
@prop({ required: true, default: 1 })
lv: number; // 对手角色等级
@prop({ required: true, default: 1 })
title: number; // 对手等级
@prop({ required: true, default: 0 })
defCe: number; // 防守战力
@prop({ required: true, default: 0 })
rankLv: number; // 对手排名
@prop({ required: true, type: PvpEnemies, default: [] })
heroes: PvpEnemies[]; // 对手阵容
@prop({ required: true, type: PvpOtherHeroes, default: [] })
otherHeroes: PvpOtherHeroes[]; // 阵容以外所有武将信息
@prop({ required: true, default: 0 })
status: number; // 状态 0-仅刷出 1-挑战过
public static async createPvpOpp(params: PvpOppCreateParam, lean = true) {
const doc = new PvpHistoryOppModel();
const update = Object.assign(doc.toJSON(), params);
delete update._id;
const defense: PvpHistoryOppType = await PvpHistoryOppModel.findOneAndUpdate({ roleId: params.roleId, pos: params.pos, status: 0 }, update, { upsert: true, new: true }).lean(lean);
return defense;
}
public static async findByRoleIdAndOppId(roleId: string, oppRoleId: string) {
const result: PvpHistoryOppType = await PvpHistoryOppModel.findOne({ roleId, oppRoleId, status: 0 }).lean();
return result;
}
public static async setStatus(roleId: string, oppRoleId: string, status: number) {
const result: PvpHistoryOppType = await PvpHistoryOppModel.findOneAndUpdate({ roleId, oppRoleId }, {status}, {new: true}).lean();
return result;
}
}
export const PvpHistoryOppModel = getModelForClass(PvpHistoryOpp);
export interface PvpHistoryOppType extends Pick<DocumentType<PvpHistoryOpp>, keyof PvpHistoryOpp> { };
export type PvpOppCreateParam = Partial<PvpHistoryOppType>; // 将所有字段变成可选项