105 lines
3.5 KiB
TypeScript
105 lines
3.5 KiB
TypeScript
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<typeof Package, {}>;
|
|
export function loadPackageModel(connect: mongoose.Connection) {
|
|
PackageModel = getModelForClass(Package, {
|
|
existingConnection: connect
|
|
});
|
|
}
|
|
|
|
export interface PackageType extends Pick<DocumentType<Package>, keyof Package> { };
|
|
export type PackageUpdate = Partial<PackageType>; // 将所有字段变成可选项
|