import { APP_ID } from './../consts/consts'; import BaseModel from './BaseModel'; import { index, getModelForClass, prop } from '@typegoose/typegoose'; class ServerInfo { @prop({ required: true }) name: string; @prop({ required: true }) host: string; @prop({ required: false }) port: number; @prop({ required: true }) status: number; @prop({ required: true }) createTime: Date; @prop({ required: true }) serverType: string; } /** * 游戏字段接口 */ @index({ id: 1 }) export default class Game extends BaseModel { @prop({ required: true }) id: number; @prop({ required: true }) name: string; @prop({ required: true }) nameEn: string; @prop({ required: true }) des: string; @prop({ required: true }) serverList: Array; @prop({ required: true }) iconUrl: string; @prop({ required: true }) version: string; @prop({ required: true }) versionCode: number; public static async getServerListByType(serverType: string) { let game = await GameModel.findOne().lean(); if (!game) { const serverInfo: ServerInfo = { name: '常山少年', host: 'pinus_test.trgame.cn', port: 3014, status: 1, createTime: new Date(), serverType: '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(); } console.log(serverType, game); let serverList: Array = game ? game.serverList : []; serverList = serverList.filter(item => { return item.serverType === serverType; }); console.log(serverType, serverList); return serverList; } } export const GameModel = getModelForClass(Game);