import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, mongoose, ReturnModelType } from '@typegoose/typegoose'; import { genCode } from '../pubUtils/util'; /** * 推广包数据 */ @index({ gid: 1, pid: 1 }) export default class Package extends BaseModel { @prop({ required: true }) regionId: number; // 大区id // @prop({ required: true }) // regionName: string; // 大区名 @prop({ required: true }) packageCode: string; // 包唯一 id @prop({ required: true }) gid: string; // 37 childGameId @prop({ required: true }) pid: string; // 37 platformId @prop({ required: true }) pkgName: string; // 包名 @prop({ required: true }) pkgDesc: string; // 包描述 @prop({ required: true, default: false }) isOpen: boolean; // 是否开启 @prop({ required: false }) loadingPage: string; // 是否开启 @prop({ required: true }) loginPage: string; // 是否开启 @prop({ required: false, type: Number }) hideServers: number[]; // 需要隐藏的服务器 public static async createNewPackage(params: PackageUpdate, uid = 1) { const { gid, pid } = params; let rec: PackageType | null = await PackageModel.findOne({ gid, pid }).lean(); if (rec) { return rec; } const packageCode = genCode(6); rec = await PackageModel.findOneAndUpdate({ gid, pid }, { $setOnInsert: { ...params, packageCode, createdBy: uid}, $set: { updatedBy: uid } }, { new: true, upsert: true }).lean(); return rec; } // 更新推广包的可更新字段 public static async updatePackage(params: PackageUpdate, uid = 1) { const { gid, pid, regionId } = params; if (!gid || !pid || !regionId) { return null; } const rec: PackageType | null = await PackageModel.findOneAndUpdate({ gid, pid, regionId }, { $set: { ...params, updatedBy: uid } }, { new: true }).lean(); return rec; } public static async getPackageByGidPid(gid: string, pid: string, isOpen = true) { const rec: PackageType | null = await PackageModel.findOne({ gid, pid, isOpen }).lean(); return rec; } // 获取所有包 public static async getAllPackages() { const recs: PackageType[] = await PackageModel.find().lean(); return recs; } // 根据大区id获取所有包 public static async getAllPackagesByRegionId(regionId: number) { const recs: PackageType[] = await PackageModel.find({ regionId }).lean(); return recs; } // 获取符合查询条件的子包 public static async getPackagesByQuery(params: PackageUpdate) { const queryParams = Object.keys(params).reduce((acc, key) => { if (!!params[key]) { acc[key] = params[key]; } return acc; }, {}); const recs: PackageType[] = await PackageModel.find(queryParams).lean(); return recs; } } export let PackageModel: ReturnModelType; export function loadPackageModel(connect: mongoose.Connection) { PackageModel = getModelForClass(Package, { existingConnection: connect }); } export interface PackageType extends Pick, keyof Package> { }; export type PackageUpdate = Partial; // 将所有字段变成可选项