修改数据库,姑且跑起来

This commit is contained in:
luying
2022-02-14 19:47:10 +08:00
parent a43c61cb5a
commit ecc55b3063
11 changed files with 1242 additions and 1166 deletions

View File

@@ -1,8 +1,8 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, Ref, mongoose, DocumentType } from '@typegoose/typegoose';
import Equip, { } from './Equip';
// import Equip, { } from './Equip';
import { CounterModel } from './Counter';
import { COUNTER, EQUIP_TYPE, HERO_CE_RATIO } from '../consts';
import { COUNTER, HERO_CE_RATIO } from '../consts';
import { reduceCe } from '../pubUtils/util';
import Skin from './Skin';
import { SearchHeroParam } from '../domain/backEndField/search';
@@ -71,30 +71,30 @@ export class HeroSkin {
enable: boolean;
}
export class Stone {
@prop({ required: true })
id: number;
@prop({ required: true })
stone: number;
}
export class EPlace {
@prop({ required: true })
id: number;
@prop({ ref: Equip, type: mongoose.Schema.Types.ObjectId })
equip: Ref<Equip>;
@prop({ required: true })
lv: number;
@prop({ required: true })
refineLv: number;
}
// 初始化
function getInitialEplace() {
let ePlace = new Array<EPlace>();
for (let i = EQUIP_TYPE.START; i <= EQUIP_TYPE.END; i++) {
let p = new EPlace();
p.id = i;
p.equip = null;
p.lv = 0;
p.refineLv = 1;
ePlace.push(p);
}
return ePlace;
quality: number;
@prop({ required: true })
qualityStage: number;
@prop({ required: true })
star: number;
@prop({ required: true })
starStage: number;
@prop({ required: true, type: Stone, _id: false })
stones: Stone[];
@prop({ required: true })
jewel: number;
}
@index({ roleId: 1, hid: 1 })
@@ -167,7 +167,7 @@ export default class Hero extends BaseModel {
@prop({ required: true, type: HeroSkin, default: [], _id: false })
skins: HeroSkin[]; // 皮肤
@prop({ required: true, type: EPlace, default: getInitialEplace(), _id: false })
@prop({ required: true, type: EPlace, default: [], _id: false })
ePlace: EPlace[]; // 武将装备引用数组
public static async findByRole(roleId: string, sort: { field: string, sortBy: number }[] = [], select?: string, getters = false) {

104
shared/db/Jewel.ts Normal file
View File

@@ -0,0 +1,104 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
// import { COUNTER } from '../consts';
// import { CounterModel } from './Counter';
import { SearchJewelParam } from '../domain/backEndField/search';
export class RandSe {
@prop({ required: true })
id: number; // 随机属性位置id
@prop({ required: true })
seid: number; // 随机属性池id
@prop({ required: true })
rand: number; // 随机属性内需要随机的值
@prop({ required: true })
locked: boolean; // 洗炼是否锁定
}
@index({ roleId: 1, hid: 1, id: 1 })
@index({ seqId: 1 })
@modelOptions({ schemaOptions: { id: false } })
export default class Equip extends BaseModel {
@prop({ required: true })
roleId: string; // 角色 id
@prop({ required: true })
roleName: string; // 角色名称
@prop({ required: true })
seqId: number; // 装备表自增 id
@prop({ required: true })
id: number; // 装备 id
@prop({ required: true })
name: string; // 装备名称
@prop({ required: false, default: 0 })
hid: number; // 装备此装备的武将 id
@prop({ required: false, default: 0 })
ePlaceId: number; // 武将装备的部位
@prop({ required: false, default: 0 })
quenchId: number; // 选择淬炼的那一条未选择时为0
@prop({ required: false, default: 0 })
quenchCnt: number; // 淬火成功次数,到了保底就绝对成功
@prop({ required: false, type: RandSe, default: [], _id: false })
randSe: RandSe[]; // 强化随机属性
@prop({ required: false, type: RandSe, default: [], _id: false })
previewRandSe: RandSe[]; // 强化随机属性预览
public static async findbyRole(roleId: string, lean = true) {
const jewels: JewelType[] = await JewelModel.find({ roleId }).lean(lean);
return jewels;
}
public static async findbySeqId(seqId: number, select?: string ) {
const jewel: JewelType = await JewelModel.findOne({ seqId }).select(select).lean();
return jewel;
}
public static async deleteAccount(roleId: string) {
let result = await JewelModel.deleteMany({ roleId });
return result;
}
private static getSearchObj(form: SearchJewelParam) {
let searchObj = {};
if(form.roleId) searchObj['roleId'] = form.roleId;
if(form.roleName) searchObj['roleName'] = { $regex: new RegExp(form.roleName.toString(), 'i') };
if(form.id) searchObj['id'] = form.id;
return searchObj
}
public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: SearchJewelParam = {}) {
let searchObj = this.getSearchObj(form);
let sort = {};
if(sortField && sortOrder) {
if(sortOrder == 'ascend') {
sort[sortField] = 1;
} else if (sortOrder == 'descend') {
sort[sortField] = -1;
}
}
const result: JewelType[] = await JewelModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
return result;
}
public static async countByCondition(form: SearchJewelParam = {}) {
let searchObj = this.getSearchObj(form);
const result = await JewelModel.count(searchObj);
return result;
}
}
export const JewelModel = getModelForClass(Equip);
export interface JewelType extends Pick<DocumentType<Equip>, keyof Equip> {
id: number;
};
export type jewelUpdate = Partial<JewelType>; // 将所有字段变成可选项