import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; // 暂时服务器列表是从game表取的,之后会转移到使用这张表,目前用作查询该服战力中位数 /** * 游戏字段接口 */ @index({ id: 1 }) @modelOptions({schemaOptions: {id: false}}) export default class Serverlist extends BaseModel { @prop({ required: true, default: 1 }) gameId: number; // 游戏id Game表的id @prop({ required: true }) id: number; // 小区id @prop({ required: true }) name: string; // 小区区名 @prop({ required: true }) groupId: number; // 大区id @prop({ required: true }) groupName: string; // 大区区名 @prop({ required: true }) host: string; // pinus连接地址 @prop({ required: false }) port: number; // pinus端口 @prop({ required: true }) serverStatus: number; // 服务器状态 public get status() { let now = new Date(); if( now > this.openTime) { return this.serverStatus; } else { return 3; // 未开服 } } @prop({ required: true }) openTime: Date; @prop({ required: true }) createTime: Date; @prop({ required: true }) serverType: string; @prop({ required: true, default: 0 }) medianCe: number; // 中位数武将战力、缩小10000倍后的结果 public static async getAllServerList() { let servers: ServerlistType[] = await ServerlistModel.find().lean({ getters: true, virtuals: true }); return servers; } public static async findByServerId(serverId: number) { let server: ServerlistType = await ServerlistModel.findOne({ id: serverId }).select('medianCe').lean({ getters: true, virtuals: true }); return server; } public static async updateByServerId(serverId: number, update: ServerlistUpdate) { let server: ServerlistType = await ServerlistModel.findOneAndUpdate({id: serverId}, {$set: update}).lean({ getters: true, virtuals: true }); return server; } public static async newServer(serverId: number, serverType: string, params: ServerlistUpdate) { const doc = new ServerlistModel(); const update = Object.assign(doc.toJSON(), { id: serverId, serverType }, params); let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId, serverType }, {$setOnInsert: update }, {new: true, upsert: true}).lean({ getters: true, virtuals: true }); return server; } public static async findByServerType(serverType: string) { let server: ServerlistType[] = await ServerlistModel.find({ serverType }).lean({ getters: true, virtuals: true }); return server; } } export const ServerlistModel = getModelForClass(Serverlist); export interface ServerlistType extends Pick, keyof Serverlist>{ id: number; }; export type ServerlistUpdate = Partial; // 将所有字段变成可选项