Files
ZYZ/shared/db/ServerGroup.ts
2023-03-20 09:49:23 +08:00

53 lines
2.0 KiB
TypeScript

import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { SERVER_GROUP_FUN_TYPE } from '../consts';
/**
* 服务器分战区
*/
@index({ serverId: -1 })
export default class ServerGroup extends BaseModel {
@prop({ required: true, default: 1 })
serverId: number; // 服务器id
@prop({ required: true, default: 1 })
groupId: number; // 战区id
@prop({ required: true, default: 0 })
gvgTime: number; // gvg生效时间
@prop({ required: true, default: 0 })
pvpTime: number; // pvp生效时间
@prop({ required: true, default: 0 })
arenaTime: number; // 3v3生效时间
public static async findByTime(time: number, type: number) {
let key = type == SERVER_GROUP_FUN_TYPE.GVG? 'gvgTime': (type == SERVER_GROUP_FUN_TYPE.PVP? 'pvpTime': 'arenaTime');
let match = {}, sort = {};
match[key] = { $lte: time, $gt: 0 };
sort[key] = -1;
const serverGroup: { serverId: number, groupId: number, time: number }[] = await ServerGroupModel.aggregate([
{ $match: match },
{ $sort: sort },
{ $group: { _id: "$serverId", groupId: { $first: "$groupId" }, time: { $first: `$${key}` }} },
{ $sort: { _id: -1 } },
{ $project: { _id: 0, serverId: "$_id", groupId: "$groupId", time: "$time" } }
]);
return serverGroup;
}
public static async updateByServerId(serverId: number, groupId: number, gvgTime: number, pvpTime: number) {
const result: ServerGroupType = await ServerGroupModel.findOneAndUpdate({ serverId, gvgTime, pvpTime }, { $set: { groupId } }, { new: true, upsert: true }).lean();
return result
}
}
export let ServerGroupModel = getModelForClass(ServerGroup);
export interface ServerGroupType extends Pick<DocumentType<ServerGroup>, keyof ServerGroup> {
id: number;
};
export type ServerGroupUpdate = Partial<ServerGroupType>; // 将所有字段变成可选项