✨ feat(gvg): 遗迹生成数据
This commit is contained in:
+62
-10
@@ -1,9 +1,22 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, mongoose, Ref } from '@typegoose/typegoose';
|
||||
import Role from './Role';
|
||||
import Role, { RoleType } from './Role';
|
||||
import { getZeroPoint } from '../pubUtils/timeUtil';
|
||||
|
||||
@index({ groupId: 1, vestigeId: 1 })
|
||||
export default class GVGVestige extends BaseModel {
|
||||
class Lineup {
|
||||
@prop({ required: true })
|
||||
actorId: number; // 武将
|
||||
@prop({ required: true })
|
||||
dataId: number; // 出兵表上所占位置
|
||||
@prop({ required: true })
|
||||
order: number; // 行动顺序
|
||||
@prop({ required: true })
|
||||
ce: number; // 战力
|
||||
}
|
||||
|
||||
@index({ day: 1, groupId: 1, vestigeId: 1, rank: 1 })
|
||||
@index({ roleId: 1 })
|
||||
export default class GVGVestigeRank extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
configId: number; // 赛期
|
||||
@@ -24,21 +37,60 @@ export default class GVGVestige extends BaseModel {
|
||||
role: Ref<Role>;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
rank: number; // 排名
|
||||
rank: number; // 排名
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
oldRank: number; // 交换前排名
|
||||
oldRank: number; // 交换前排名
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
historyRank: number; // 历史最高排名
|
||||
historyRank: number; // 历史最高排名
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
locked: number; // 是否被挑战
|
||||
locked: number; // 是否被挑战
|
||||
|
||||
@prop({ required: true, default: false })
|
||||
hasAdjustLineup: boolean; // 是否调整过阵容
|
||||
|
||||
@prop({ required: true, type: Lineup, default: [] })
|
||||
lineup: Lineup[]; // 阵容
|
||||
|
||||
@prop({ required: true, type: Number, default: [] })
|
||||
oppRanks: number[]; // 对手的排名
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
refreshCnt: number; // 刷新次数
|
||||
|
||||
public static async findRankByRole(vestigeId: number, roleId: string) {
|
||||
let today = getZeroPoint();
|
||||
let result: GVGVestigeRankType = await GVGVestigeRankModel.findOne({ day: today, vestigeId, roleId }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async initRank(configId: number, vestigeId: number, groupId: number, role: RoleType, oppRanks: number[]) {
|
||||
let today = getZeroPoint();
|
||||
let doc = new GVGVestigeRankModel();
|
||||
let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupId, oppRanks });
|
||||
let result: GVGVestigeRankType = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: role.roleId }, { $setOnInsert: update }, { new: true, upsert: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByRanks(groupId: number, vestigeId: number, ranks: number[]) {
|
||||
let today = getZeroPoint();
|
||||
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, rank: { $in: ranks } })
|
||||
.populate('role', 'roleId roleName head frame spine heads frames spines title lv guildName serverId updatedAt')
|
||||
.lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updateCe(roleId: string, hid: number, ce: number) {
|
||||
let today = getZeroPoint();
|
||||
await GVGVestigeRankModel.updateMany({ day: today, roleId, 'lineup.hid': hid }, { $set: { 'lineupCe.$.ce': ce } });
|
||||
}
|
||||
}
|
||||
|
||||
export const GVGVestigeModel = getModelForClass(GVGVestige);
|
||||
export const GVGVestigeRankModel = getModelForClass(GVGVestigeRank);
|
||||
|
||||
export interface GVGVestigeType extends Pick<DocumentType<GVGVestige>, keyof GVGVestige> {
|
||||
export interface GVGVestigeRankType extends Pick<DocumentType<GVGVestigeRank>, keyof GVGVestigeRank> {
|
||||
id: number;
|
||||
};
|
||||
export type GVGVestigeUpdate = Partial<GVGVestigeType>; // 将所有字段变成可选项
|
||||
export type GVGVestigeRankUpdate = Partial<GVGVestigeRankType>; // 将所有字段变成可选项
|
||||
|
||||
Reference in New Issue
Block a user