import { APP_ID } from './../consts'; import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; import { getSeconds } from '../pubUtils/timeUtil'; /** * 游戏字段接口 */ @index({ id: 1 }) @modelOptions({schemaOptions: {id: false}}) export default class Notice extends BaseModel { @prop({ required: true }) id: number; @prop({ required: true }) title: string; @prop({ required: true }) tag: number; @prop({ required: true }) type: number; @prop({ required: true }) content: number; @prop({ required: true }) order: number; @prop({ required: true }) order: number; @prop({ required: true }) showStartTime: Date; @prop({ required: true }) showEndTime: Date; public static async getAllServerList() { let game: GameType = await GameModel.findOne().lean(); if(game) { return game.serverList; } else { return [] } } public static async getServerList() { let game: GameType = await GameModel.findOne().lean({ getter: true, virtuals: true }); if (!game) { const serverInfo = new ServerInfo(1, '常山少年', 1, '逍遥津', 'pinus_test.trgame.cn', 3014, 1, 'official'); const iconUrl = `https://download.tgamebox.cn/avatar/${APP_ID}/1.png`; game = await GameModel.findOneAndUpdate( {}, { id: 1, name: '赵云传', nameEn: 'zyz', des: '牛逼的战棋', iconUrl, version: '0.0.1', versionCode: 1, $push: { serverList: serverInfo } }, { upsert: true, new: true }, ).lean({ getter: true, virtuals: true }); } let serverList: Array = game ? game.serverList : []; return serverList; } public static async newServer(serverId: number, serverType: string, name: string, host: string, port: number, status: number, lean = true) { let serverInfo = new ServerInfo(serverId, name, 1, '逍遥津', host, port, status, serverType); let game: GameType = await GameModel.findOneAndUpdate({}, {$push: {serverList: serverInfo}}, {new: true}).lean(lean); return game; } } export const GameModel = getModelForClass(Game); export interface GameType extends Pick, keyof Game>{ id: number; };