Files
ZYZ/shared/db/Link.ts
T
2023-04-03 17:59:06 +08:00

48 lines
2.1 KiB
TypeScript

// 链接
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
@index({ type: 1 })
@index({ serverId: 1 })
export default class Link extends BaseModel {
@prop({ required: true, default: 0 })
type: number; // 1-微信群,2-手机绑定 3-公众号关注 4-论坛 5-客服
@prop({ required: true, default: 0 })
serverId: number; // 小区id,不限的为0
@prop({ required: true, default: '' })
link: string; // 外链
@prop({ required: true, default: '' })
qrCodeLink: string; // 微信群二维码
public static async findByServerId(serverId: number) {
const result: LinkType[] = await LinkModel.find({ serverId: { $in: [serverId, 0] } }).sort({ serverId: 1 }).lean();
return result;
}
public static async findByType(type: number) {
const result: LinkType = await LinkModel.findOne({ type }).select('-_id -__v').lean();
return result;
}
public static async findByTypes(types: number[]) {
const result: LinkType[] = await LinkModel.find({ type: { $in: types } }).select('-_id -__v').sort({ serverId: 1 }).lean();
return result;
}
public static async updateByServerAndType(serverId: number, type: number, param: LinkUpdateInter, uid: number) {
const result: LinkType = await LinkModel.findOneAndUpdate({ serverId, type }, { $set: {...param, updatedBy: uid}, $setOnInsert: { createdBy: uid } }, { new: true, upsert: true }).lean();
return result;
}
public static async updateLinks(updateArr: { type: number, link?: string, qrCodeLink?: string }[], uid: number) {
await LinkModel.bulkWrite(updateArr.map(({type, link, qrCodeLink}) => {
return { updateOne: { filter: { type, serverId: 0 }, update: { $set: { link, qrCodeLink, updatedBy: uid }, $setOnInsert: { createdBy: uid } }, upsert: true} }
}))
}
}
export const LinkModel = getModelForClass(Link);
export interface LinkType extends Pick<DocumentType<Link>, keyof Link> { };
export type LinkUpdateInter = Partial<LinkType>;