Files
ZYZ/shared/db/Game.ts
2020-11-23 16:29:21 +08:00

93 lines
2.5 KiB
TypeScript

import { APP_ID } from './../consts/consts';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
class ServerInfo {
@prop({ required: true })
id: number;
@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, type: ServerInfo, default: [] })
serverList: Array<ServerInfo>;
@prop({ required: true })
iconUrl: string;
@prop({ required: true })
version: string;
@prop({ required: true })
versionCode: number;
public static async getAllServerList() {
let game = await GameModel.findOne().lean();
if(game) {
return game.serverList;
} else {
return []
}
}
public static async getServerListByType(serverType: string) {
let game = await GameModel.findOne().lean();
if (!game) {
const serverInfo: ServerInfo = { id: 1, 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<ServerInfo> = game ? game.serverList : [];
serverList = serverList.filter(item => { return item.serverType === serverType; });
console.log(serverType, serverList);
return serverList;
}
public static async newServer(serverId: number, serverType: string, name: string, host: string, port: number, status: number, lean = true) {
let serverInfo: ServerInfo = {id: serverId, name, host, port, status, createTime: new Date(), serverType};
let game = await GameModel.findOneAndUpdate({}, {$push: {serverList: serverInfo}}, {new: true}).lean(lean);
return game;
}
}
export const GameModel = getModelForClass(Game);