Files
ZYZ/shared/db/Resonance.ts
2023-10-09 15:11:54 +08:00

122 lines
4.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import BaseModel from './BaseModel';
import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose';
import { HeroSkin } from './Hero';
export class ResonanceEplaceStone {
@prop({ required: true })
id: number; // 孔的id
@prop({ required: true })
stone: number; // 装备的宝石id未装备为0
}
export class ResonanceEplace {
@prop({ required: true })
id: number; // 装备栏idid固定部位
@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: ResonanceEplaceStone, _id: false })
stones: ResonanceEplaceStone[]; // 地玉石初始的时候就有3个槽是否解锁靠star判断
@prop({ required: true })
jewel: number; // 天晶石的seqId具体状态去jewel表查
}
export class ResonanceConnection {
@prop({ required: true })
shipId: number; // 羁绊编号
@prop({ required: true })
level: number;
@prop({ required: true })
exp: number;
}
export class ResonanceTalent {
@prop({ required: true })
id: number; // 天赋表id
@prop({ required: true })
level: number; // 天赋等级
}
@index({ roleId: 1, position: 1, hid: 1 })
export default class Resonance 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 })
jobStage: number; // 职阶
// @prop({ required: true, type: ResonanceTalent, _id: false })
// talent: ResonanceTalent[] // 天赋
// @prop({ required: true })
// usedTalentPoint: number; // 已使用的天赋点数
@prop({ required: true })
skinId: number; // 当前皮肤idfashions表的heroId字段
@prop({ required: true, type: HeroSkin, default: [], _id: false })
skins: HeroSkin[]; // 皮肤
@prop({ required: true, type: ResonanceConnection, _id: false })
connections: ResonanceConnection[] // 羁绊
@prop({ required: true, type: ResonanceEplace, _id: false })
ePlace: ResonanceEplace[] // 所有装备栏
@prop({ required: true })
ce: number // 战力
public static async findByRoleId(roleId: string, lean = true) {
let result: ResonanceType[] = await ResonanceModel.find({ roleId }).lean(lean);
return result;
}
public static async findByPosition(roleId: string, position: number, lean = true) {
let result: ResonanceType = await ResonanceModel.findOne({ roleId, position }).lean(lean);
return result
}
public static async findByPositionAndHid(roleId: string, position: number, hid: number, lean = true) {
let result: ResonanceType = await ResonanceModel.findOne({ roleId, position, hid }).lean(lean);
return result
}
public static async updateByPosition(roleId: string, position: number, param: ResonancePara, lean = true) {
let result: ResonanceType = await ResonanceModel.findOneAndUpdate({ roleId, position }, { $set: param }, { new: true, upsert: true }).lean(lean);
return result;
}
public static async deletePosition(roleId: string, position: number) {
let result = await ResonanceModel.deleteMany({ roleId, position });
return result;
}
}
export const ResonanceModel = getModelForClass(Resonance);
export interface ResonanceType extends Pick<DocumentType<Resonance>, keyof Resonance> { };
export type ResonancePara = Partial<ResonanceType>; // 将所有字段变成可选项