feat: dataset folder

This commit is contained in:
archer
2023-09-08 18:06:57 +08:00
parent 971c9cb291
commit 0b0f184dd1
22 changed files with 417 additions and 79 deletions

View File

@@ -0,0 +1,62 @@
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
import type { NextApiRequest, NextApiResponse } from 'next';
import { jsonRes } from '@/service/response';
import { authUser } from '@/service/utils/auth';
import { connectToDatabase, KB } from '@/service/mongo';
import { KbTypeMap } from '@/constants/kb';
const limit = 50;
let success = 0;
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
await connectToDatabase();
await authUser({ req, authRoot: true });
await initKb();
jsonRes(res, {});
} catch (error) {
jsonRes(res, {
code: 500,
error
});
}
}
async function initKb(): Promise<any> {
try {
// 找到所有 type 不存在的 kb
const kbList = await KB.find({ type: { $exists: false } }).limit(limit);
if (kbList.length === 0) return;
await Promise.allSettled(
kbList.map(async (kb) => {
let id = '';
try {
// 创建一组以 kb 的 nameuserId 相同文件夹类型的数据
const result = await KB.create({
parentId: null,
userId: kb.userId,
avatar: KbTypeMap.folder.avatar,
name: kb.name,
type: 'folder'
});
id = result._id;
// 将现有的 kb 挂载到这个文件夹下
await KB.findByIdAndUpdate(kb._id, {
parentId: result._id,
type: 'manualData'
});
console.log(++success);
} catch (error) {
await KB.findByIdAndDelete(id);
}
})
);
return initKb();
} catch (error) {
return initKb();
}
}

View File

@@ -6,11 +6,7 @@ import type { CreateKbParams } from '@/api/request/kb';
export default async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
try {
const { name, tags, avatar, vectorModel } = req.body as CreateKbParams;
if (!name || !vectorModel) {
throw new Error('缺少参数');
}
const { name, tags, avatar, vectorModel, parentId, type } = req.body as CreateKbParams;
// 凭证校验
const { userId } = await authUser({ req, authToken: true });
@@ -22,7 +18,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
userId,
tags,
vectorModel,
avatar
avatar,
parentId: parentId || null,
type
});
jsonRes(res, { data: _id });

View File

@@ -33,9 +33,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
_id: data._id,
avatar: data.avatar,
name: data.name,
userId: data.userId,
vectorModel: getVectorModel(data.vectorModel),
tags: data.tags.join(' ')
userId: data.userId
}
});
} catch (err) {

View File

@@ -2,29 +2,25 @@ import type { NextApiRequest, NextApiResponse } from 'next';
import { jsonRes } from '@/service/response';
import { connectToDatabase, KB } from '@/service/mongo';
import { authUser } from '@/service/utils/auth';
import { KbListItemType } from '@/types/plugin';
import { getVectorModel } from '@/service/utils/data';
import { KbListItemType } from '@/types/plugin';
export default async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
try {
const { parentId } = req.query as { parentId: string };
// 凭证校验
const { userId } = await authUser({ req, authToken: true });
await connectToDatabase();
const kbList = await KB.find(
{
userId
},
'_id avatar name tags vectorModel'
).sort({ updateTime: -1 });
const kbList = await KB.find({
userId,
parentId: parentId || null
}).sort({ updateTime: -1 });
const data = await Promise.all(
kbList.map(async (item) => ({
_id: item._id,
avatar: item.avatar,
name: item.name,
tags: item.tags,
...item.toJSON(),
vectorModel: getVectorModel(item.vectorModel)
}))
);

View File

@@ -6,7 +6,7 @@ import type { KbUpdateParams } from '@/api/request/kb';
export default async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
try {
const { id, name, tags, avatar } = req.body as KbUpdateParams;
const { id, name, avatar, tags = '' } = req.body as KbUpdateParams;
if (!id || !name) {
throw new Error('缺少参数');
@@ -23,8 +23,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
userId
},
{
avatar,
name,
...(name && { name }),
...(avatar && { avatar }),
tags: tags.split(' ').filter((item) => item)
}
);