import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; import { formatTime } from '../pubUtils/timeUtil'; import { TIME_FORMAT } from '../consts' /** * 游戏字段接口 */ @index({ id: 1 }) @modelOptions({schemaOptions: {id: false}}) export default class Notice extends BaseModel { @prop({ required: true }) id: number; // 公告id @prop({ required: true }) title: string; // 公告标题 @prop({ required: true }) tag: number; // 公告显示标签,在系统参数表中配了 @prop({ required: true }) type: number; // 类型 1-公告 2-活动 @prop({ required: true }) content: number; // 公告内容 @prop({ required: true }) timeStr: string; // 时间显示 @prop({ required: true }) startTime: Date; // 活动开始时间 @prop({ required: true }) endTime: Date; // 活动结束时间 public get time() { let startTime = formatTime(this.startTime, TIME_FORMAT.TYPE_SLASH); let endTime = formatTime(this.endTime, TIME_FORMAT.TYPE_SLASH); return this.timeStr.replace(/%startTime/g, startTime).replace(/%endTime/g, endTime); } @prop({ required: true, select: false }) sort: number; @prop({ required: true, select: false }) showStartTime: Date; @prop({ required: true, select: false }) showEndTime: Date; @prop({ required: true, select: false }) serverType: string; // 服务器类型 @prop({ required: true, select: false }) isEnable: boolean; public static async getAllNotice(serverType: string) { let curTime = new Date(); let notices: NoticeType[] = await NoticeModel.find({ showStartTime: { $lte: curTime }, showEndTime: { $gte: curTime }, isEnable: true, serverType }) .sort({ sort: -1, createTime: -1 }) .lean({ virtuals: true }); return notices; } } export const NoticeModel = getModelForClass(Notice); export interface NoticeType extends Pick, keyof Notice>{ id: number; };