/** * 邮件的模板,在GM后台能看到的邮件列表 */ import BaseModel from './BaseModel'; import { getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { nowSeconds } from '../pubUtils/timeUtil'; import { GM_MAIL_TYPE } from '../consts/constModules/mailConst'; class Reward { @prop({ required: true }) id: number; @prop({ required: true }) count: number; } export default class GMMail extends BaseModel { @prop({ required: true, type: Reward, default: [], _id: false }) goods: Reward[]; @prop({ required: true, default: nowSeconds() }) sendTime: number; @prop({ required: true }) endTime: number; @prop({ required: true }) content: string; @prop({ required: true }) sendName: string; @prop({ required: true, enum: GM_MAIL_TYPE }) mailType: GM_MAIL_TYPE; // 1-单人邮件 2-多人邮件 3-全服邮件 public static async addMail(params: GMMailTypeParam) { const doc = new GMMailModel(); let mail = Object.assign(doc.toJSON(), params); mail = await GMMailModel.findOneAndUpdate({ _id: mail._id }, { $set: mail }, {upsert: true, new: true}).lean(); return mail; } public static async getGmMailById(_id: string, lean = true) { const result: GMMailType = await GMMailModel.findOne({ _id }).lean(lean); return result; } public static async getMail(updatedMailAt: number, lean = true) { const result: GMMailType[] = await GMMailModel.find({ $or: [{updatedAt: { $gte: new Date(updatedMailAt) }}, {sendTime: { $lte: nowSeconds() }}], endTime: { $gte: nowSeconds()} }).lean(lean); return result; } public static async getMails( lean = true) { const result: GMMailType[] = await GMMailModel.find({ endTime: { $gte: nowSeconds() }}).lean(lean); return result; } } export const GMMailModel = getModelForClass(GMMail); export interface GMMailType extends Pick, keyof GMMail> { }; export type GMMailTypeParam = Partial; // 将所有字段变成可选项