43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import BaseModel from './BaseModel';
|
|
import { index, getModelForClass, prop, DocumentType, ReturnModelType, mongoose } from '@typegoose/typegoose';
|
|
|
|
/**
|
|
* GM账号和用户组关系接口
|
|
*/
|
|
@index({ uid: 1, groupId: 1 })
|
|
@index({ uid: 1, env: 1 })
|
|
|
|
export default class GMUserGroup extends BaseModel {
|
|
@prop({ required: true })
|
|
uid: number;
|
|
|
|
@prop({ required: true, type: String })
|
|
envs: string[];
|
|
|
|
@prop({ required: true })
|
|
groupId: number;
|
|
|
|
public static async getUserGroupByUid(uid: number) {
|
|
const user: GMUserGroupType = await GMUserGroupModel.findOne({ uid }).lean();
|
|
return user;
|
|
}
|
|
|
|
public static async removeUserGroup(uid: number, groups: Array<number>) {
|
|
const user = await GMUserGroupModel.deleteMany({uid, groupId: {$in: groups}});
|
|
return user;
|
|
}
|
|
|
|
public static async addUserGroup(uid: number, groupId: number, envs: string[]) {
|
|
const result: GMUserGroupType = await GMUserGroupModel.findOneAndUpdate({uid}, { envs, groupId }, {new:true, upsert:true}).lean();
|
|
return result;
|
|
}
|
|
}
|
|
|
|
export let GMUserGroupModel: ReturnModelType<typeof GMUserGroup, {}>;
|
|
export function loadGMUserGroupModel(connect: mongoose.Connection) {
|
|
GMUserGroupModel = getModelForClass(GMUserGroup, {
|
|
existingConnection: connect
|
|
});
|
|
}
|
|
|
|
export interface GMUserGroupType extends Pick<DocumentType<GMUserGroup>, keyof GMUserGroup>{}; |