✨ feat(gvg): 组建期
This commit is contained in:
82
shared/db/GVGLeaguePrepare.ts
Normal file
82
shared/db/GVGLeaguePrepare.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, } from '@typegoose/typegoose';
|
||||
|
||||
class Tech {
|
||||
@prop({ required: true, default: 0 })
|
||||
id: number;
|
||||
@prop({ required: true, default: 0 })
|
||||
progress: number; // 贡献
|
||||
@prop({ required: true, default: 0 })
|
||||
status: number; // 0-已解锁 1-已激活
|
||||
}
|
||||
|
||||
class DonateRec {
|
||||
@prop({ required: true, default: 0 })
|
||||
roleId: string;
|
||||
@prop({ required: true, default: 0 })
|
||||
time: number;
|
||||
@prop({ required: true, default: 0 })
|
||||
count: number;
|
||||
}
|
||||
|
||||
class Resource {
|
||||
@prop({ required: true, default: 0 })
|
||||
food: number; // 粮食
|
||||
@prop({ required: true, default: 0 })
|
||||
mineral: number; // 矿物
|
||||
@prop({ required: true, default: 0 })
|
||||
wood: number; // 木堆
|
||||
}
|
||||
|
||||
@index({ leagueCode: 1, configId: 1 })
|
||||
export default class GVGLeaguePrepare extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
configId: number; // 赛期配置id
|
||||
|
||||
@prop({ required: true })
|
||||
leagueCode: string; // 联军
|
||||
|
||||
@prop({ required: true, default: 1 })
|
||||
lv: number; // 等级
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
maxMemberCnt: number; // 进入备战期初始玩家人数
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
producerCnt: number; // 选择内政人数
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
fighterCnt: number; // 选择外政人数
|
||||
|
||||
@prop({ required: true, default: [], type: Tech, _id: false })
|
||||
tech: Tech[]; // 千机阁
|
||||
|
||||
@prop({ required: true, default: [], type: DonateRec, _id: false })
|
||||
donateRec: DonateRec[]; // 捐献记录
|
||||
|
||||
@prop({ required: true, default: {food: 0, mineral: 0, wood: 0}, type: Resource, _id: false })
|
||||
resources: Resource
|
||||
|
||||
public static async initData(configId: number, leagueCode: string, maxMemberCnt: number) {
|
||||
const doc = new GVGLeaguePrepareModel();
|
||||
const update = Object.assign(doc.toJSON(), { maxMemberCnt });
|
||||
delete update._id;
|
||||
|
||||
const result: GVGLeaguePrepareType = await GVGLeaguePrepareModel.findOneAndUpdate({ configId, leagueCode }, { $setOnInsert: update }, { upsert: true, new: true })
|
||||
.select({ _id: 0, __v: 0, createdAt: 0, updatedAt: 0 }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByLeague(configId: number, leagueCode: string) {
|
||||
const result: GVGLeaguePrepareType = await GVGLeaguePrepareModel.findOne({ configId, leagueCode }).lean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const GVGLeaguePrepareModel = getModelForClass(GVGLeaguePrepare);
|
||||
|
||||
export interface GVGLeaguePrepareType extends Pick<DocumentType<GVGLeaguePrepare>, keyof GVGLeaguePrepare> {
|
||||
id: number;
|
||||
};
|
||||
export type GVGLeaguePrepareUpdate = Partial<GVGLeaguePrepareType>; // 将所有字段变成可选项
|
||||
Reference in New Issue
Block a user