Files
ZYZ/shared/db/ActivityGroupType.ts
2021-12-16 20:48:11 +08:00

113 lines
4.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { CounterModel } from './Counter';
import { COUNTER, ACTIVITY_TYPE } from '../consts';
/**
* 活动合集
*/
@index({ activityId: 1 })
class ActivityType {
@prop({ required: true })
index: number; // 活动集合内部id防止activityType有重复的情况
@prop({ required: true, enum: ACTIVITY_TYPE })
activityType: ACTIVITY_TYPE; // 活动类型
}
export default class Activity_GroupType extends BaseModel {
@prop({ required: true })
groupType: number; // 类型id创建时自增
@prop({ required: true })
groupTypeName: string; // 类型名
@prop({ required: true, type: ActivityType, _id: false })
activityTypes: ActivityType[]; // 活动类型集合
public static async findByGroupType(groupType: number) {
let result: ActivityGroupTypeInter = await ActivityGroupTypeModel.findOne({ groupType }).lean();
return result;
}
public static async createActivityGroupType(groupTypeName: string, types: number[], uid = 1) {
let activityTypes = types.map((value, index) => {
return { index: index + 1, activityType: value };
});
let groupType = await CounterModel.getNewCounter(COUNTER.ACTIVITY_GROUP_TYPE);
let result: ActivityGroupTypeInter = await ActivityGroupTypeModel.findOneAndUpdate({ groupType }, {
$setOnInsert: { groupTypeName, activityTypes, createdBy: uid }, $set: { updatedBy: uid }
}, { new: true, upsert: true }).lean();
return result;
}
public static async updateActivityGroupType(groupType: number, groupTypeName: string, types: number[], uid = 1) {
let activityTypes = types.map((value, index) => {
return { index: index + 1, activityType: value };
});
let result: ActivityGroupTypeInter = await ActivityGroupTypeModel.findOneAndUpdate({ groupType }, {
$set: { groupTypeName, activityTypes, updatedBy: uid }
}, { new: true }).lean();
return result;
}
public static async deleteActivityGroupType(groupType: number) {
let result = await ActivityGroupTypeModel.deleteMany({ groupType });
return result;
}
private static getSearchObj(form: { groupType?: number, groupTypeName?: string }) {
let searchObj = {};
if(form.groupType != undefined) searchObj['groupType'] = form.groupType;
if(form.groupTypeName != undefined) searchObj['groupTypeName'] = form.groupTypeName;
return searchObj;
}
//查询
public static async findByCondition(page: number, pageSize: number, sortField: string, sortOrder: string, form: { groupType?: number, groupTypeName?: string } = {}) {
let searchObj = this.getSearchObj(form);
let sort = {};
if(sortField && sortOrder) {
if(sortOrder == 'ascend') {
sort[sortField] = 1;
} else if (sortOrder == 'descend') {
sort[sortField] = -1;
}
}
const result: ActivityGroupTypeInter[] = await ActivityGroupTypeModel.find(searchObj, { _id: 0 }).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
return result;
}
// 获得活动数量
public static async countByCondition(form: { groupType?: number, groupTypeName?: string } = {}) {
let searchObj = this.getSearchObj(form);
const result = await ActivityGroupTypeModel.count(searchObj);
return result;
}
public static async findAllActivityGroupTypes() {
let all: ActivityGroupTypeInter[] = [];
let createdAt;
for(let i = 0; i < 9999; i++) { // 防死循环
let condition = {};
if(createdAt) condition['createdAt'] = { $gt: createdAt }
let cur: ActivityGroupTypeInter[] = await ActivityGroupTypeModel.find(condition).limit(1000).sort({ createdAt: 1 }).lean();
if(cur.length == 0) break;
createdAt = cur[cur.length - 1].createdAt;
all.push(...cur);
}
return all;
}
}
export const ActivityGroupTypeModel = getModelForClass(Activity_GroupType);
export interface ActivityGroupTypeInter extends Pick<DocumentType<Activity_GroupType>, keyof Activity_GroupType> {
id: number;
};
export type ActivityGroupTypeUpdate = Partial<ActivityGroupTypeInter>; // 将所有字段变成可选项