创建部门或者子部门
javascript
import type { NextApiRequest, NextApiResponse } from 'next';
import { NextAPI } from '@/service/middleware/entry';
import { MongoOrgModel } from '@fastgpt/service/support/permission/org/orgSchema';
async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
const { name, avatar, description, parentId } = req.body;
const orgTeam = await MongoOrgModel.findOne({ _id: parentId });
if (!orgTeam) {
return res.status(400).json({ error: 'Parent organization not found' });
}
const newOrgTeam = {
name,
avatar,
description,
path: `${orgTeam.path}/${orgTeam.pathId}`,
teamId: orgTeam.teamId
};
// 创建子部门
const createdOrg = await MongoOrgModel.create(newOrgTeam);
res.status(200).json(createdOrg);
} catch (error: any) {
return res.status(500).json({ message: '服务器内部错误' });
}
}
export default NextAPI(handler);
查询部门
javascript
import type { NextApiRequest, NextApiResponse } from 'next';
import { NextAPI } from '@/service/middleware/entry';
import { MongoOrgModel } from '@fastgpt/service/support/permission/org/orgSchema';
import { authCert } from '@fastgpt/service/support/permission/auth/common';
import { Types } from 'mongoose';
async function handler(req: NextApiRequest, res: NextApiResponse) {
const userInfo = await authCert({ req, authToken: true });
const orgList = await MongoOrgModel.find({
teamId: new Types.ObjectId(userInfo.teamId)
})
.populate('members')
.lean();
return orgList;
}
export default NextAPI(handler);
部门及子部门及所有相关成员删除
javascript
import type { NextApiRequest, NextApiResponse } from 'next';
import { NextAPI } from '@/service/middleware/entry';
import { MongoOrgModel } from '@fastgpt/service/support/permission/org/orgSchema';
import { MongoOrgMemberModel } from '@fastgpt/service/support/permission/org/orgMemberSchema';
async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
const { orgId } = req.query;
const org = await MongoOrgModel.findById(orgId);
if (!org) {
return res.status(404).json({ message: '部门不存在' });
}
// console.log('当前部门详情:', org);
// 所有子部门
const escapedPath = org.path.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const pathRegex = new RegExp(`^${escapedPath}/`);
const orgMatchList = await MongoOrgModel.find({
path: {
$regex: pathRegex
}
});
// console.log('子部门匹配详情:', orgMatchList);
const delOrgIds = [...orgMatchList.map((i) => i._id.toString()), orgId];
// console.log('需要删除的所有部门id:', delOrgIds);
const session = await MongoOrgModel.startSession();
session.startTransaction();
try {
// 删除部门及子部门所有成员
await MongoOrgMemberModel.deleteMany({
orgId: {
$in: delOrgIds
}
}).session(session);
// console.log('部门及子部门删除所有成员结果:', del);
// 删除部门及子部门
await MongoOrgModel.deleteMany({
_id: {
$in: delOrgIds
}
}).session(session);
await session.commitTransaction();
// console.log('部门删除结果', orgdel);
} catch (error) {
await session.abortTransaction();
throw error;
} finally {
session.endSession();
}
return res.status(200).json({ success: true });
} catch (error: any) {
// console.error('删除失败:', error);
return res.status(500).json({ message: '服务器内部错误' });
}
}
export default NextAPI(handler);
管理成员,包括删除和添加
javascript
import type { NextApiRequest, NextApiResponse } from 'next';
import { NextAPI } from '@/service/middleware/entry';
import { MongoOrgModel } from '@fastgpt/service/support/permission/org/orgSchema';
import { MongoOrgMemberModel } from '@fastgpt/service/support/permission/org/orgMemberSchema';
async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
const { orgId, members } = req.body;
// console.log('{ orgId, members }::::', { orgId, members })
const org = await MongoOrgModel.findById(orgId);
const orgMembers = await MongoOrgMemberModel.find({ orgId: org?._id }).lean();
let tmbIds = Object.values(orgMembers.map((m) => m.tmbId.toString()));
let memberTmbIds = members.map((m: any) => m.tmbId);
// 分类:新增、删除
const toDelete = tmbIds.filter((item) => !new Set(memberTmbIds).has(item));
const toAdd = memberTmbIds.filter((item: any) => !new Set(tmbIds).has(item));
await MongoOrgMemberModel.deleteMany({
tmbId: { $in: toDelete }
});
const addArr = toAdd.map((a: any) => {
return {
teamId: org?.teamId,
orgId,
tmbId: a
};
});
await MongoOrgMemberModel.insertMany(addArr);
} catch (error: any) {
return res.status(500).json({ message: '服务器内部错误' });
}
}
export default NextAPI(handler);
移动部门
javascript
import type { NextApiRequest, NextApiResponse } from 'next';
import { NextAPI } from '@/service/middleware/entry';
import { MongoOrgModel } from '@fastgpt/service/support/permission/org/orgSchema';
async function handler(req: NextApiRequest, res: NextApiResponse) {
const { targetOrgId, orgId } = req.body;
try {
const targetOrg = await MongoOrgModel.findById(targetOrgId);
if (!targetOrg) {
return res.status(404).json({ message: '部门不存在' });
}
const path = targetOrg.path + '/' + targetOrg.pathId;
await MongoOrgModel.findByIdAndUpdate(orgId, { path });
// console.log(targetOrg, org)
return res.status(200).json({ success: true });
} catch (err: any) {
return res.status(400).json({ message: err.message });
}
}
export default NextAPI(handler);