import BaseModel from './BaseModel'; import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose'; import { HeroSkin } from './Hero'; export class ResonanceHistoryEplaceStone { @prop({ required: true }) id: number; // 孔的id @prop({ required: true }) stone: number; // 装备的宝石id,未装备为0 } export class ResonanceHistoryEplace { @prop({ required: true }) id: number; // 装备栏id,id固定部位 @prop({ required: true }) equipId: number; // 装备表id @prop({ required: true }) lv: number; // 强化等级 @prop({ required: true }) quality: number; // 品质 @prop({ required: true }) qualityStage: number; // 升品之前需要的次数 @prop({ required: true }) star: number; // 星级 @prop({ required: true }) starStage: number; // 升星级之前的小点 @prop({ required: true, type: ResonanceHistoryEplaceStone, _id: false }) stones: ResonanceHistoryEplaceStone[]; // 地玉石,初始的时候就有3个槽,是否解锁靠star判断 @prop({ required: true }) jewel: number; // 天晶石的seqId,具体状态去jewel表查 } export class ResonanceHistoryConnection { @prop({ required: true }) shipId: number; // 羁绊编号 @prop({ required: true }) level: number; @prop({ required: true }) exp: number; } @index({ roleId: 1, position: 1, hid: 1, time: 1 }) export default class ResonanceHistory extends BaseModel { @prop({ required: true }) roleId: string; @prop({ required: true }) position: number; // 上阵位置,前6(6是鸣主配在系统参数表)不存通过计算获得,已解锁未上阵仅有positon @prop({ required: true }) hid: number; // 武将id @prop({ required: true }) seqId: number; // 武将表自增id @prop({ required: true }) lv: number; //武将等级 @prop({ required: true }) exp: number; // @prop({ required: true }) job: number; // @prop({ required: true }) jobStage: number; // 职阶 @prop({ required: true }) skinId: number; // 当前皮肤id,fashions表的heroId字段 @prop({ required: true, type: HeroSkin, default: [], _id: false }) skins: HeroSkin[]; // 皮肤 @prop({ required: true, type: ResonanceHistoryConnection, _id: false }) connections: ResonanceHistoryConnection[] // 羁绊 @prop({ required: true, type: ResonanceHistoryEplace, _id: false }) ePlace: ResonanceHistoryEplace[] // 所有装备栏 @prop({ required: true }) ce: number // 战力 @prop({ required: true, default: () => new Date() }) time: Date; // public static async findByRoleId(roleId: string, lean = true) { // let result: ResonanceHistoryType[] = await ResonanceHistoryModel.find({ roleId }).select({ '_id': -1 }).lean(lean); // return result; // } // public static async findByPosition(roleId: string, position: number, lean = true) { // let result: ResonanceHistoryType = await ResonanceHistoryModel.findOne({ roleId, position }).select({ '_id': -1 }).lean(lean); // return result // } // public static async findByPositionAndHid(roleId: string, position: number, hid: number, lean = true) { // let result: ResonanceHistoryType = await ResonanceHistoryModel.findOne({ roleId, position, hid }).select({ '_id': -1 }).lean(lean); // return result // } public static async updateByPosition(roleId: string, position: number, param: ResonanceHistoryPara, lean = true) { delete param._id; let result: ResonanceHistoryType = await ResonanceHistoryModel.findOneAndUpdate({ roleId, position, time: new Date() }, { $set: param }, { new: true, upsert: true }).lean(lean); return result; } // public static async deletePosition(roleId: string, position: number) { // let result = await ResonanceHistoryModel.deleteMany({ roleId, position }); // return result; // } } export const ResonanceHistoryModel = getModelForClass(ResonanceHistory); export interface ResonanceHistoryType extends Pick, keyof ResonanceHistory> { }; export type ResonanceHistoryPara = Partial; // 将所有字段变成可选项