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, keyof ServerGroup> { id: number; }; export type ServerGroupUpdate = Partial; // 将所有字段变成可选项