Open Yufu Feishu Knowledge Base Permissions (#4867)

* add feishu yuque dataset

* Open Yufu Feishu Knowledge Base Permissions

* Refactor the dataset request module, optimize the import path, and fix the type definition

---------

Co-authored-by: dreamer6680 <146868355@qq.com>
This commit is contained in:
dreamer6680
2025-05-22 23:19:55 +08:00
committed by GitHub
parent 6a6719e93d
commit 9af92d1eae
13 changed files with 590 additions and 190 deletions

View File

@@ -1,6 +1,5 @@
import { getProApiDatasetFileListRequest } from '@/service/core/dataset/apiDataset/controller';
import { getApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset';
import { NextAPI } from '@/service/middleware/entry';
import { DatasetErrEnum } from '@fastgpt/global/common/error/code/dataset';
import type { ParentIdType } from '@fastgpt/global/common/parentFolder/type';
import type {
APIFileItem,
@@ -8,12 +7,10 @@ import type {
YuqueServer,
FeishuServer
} from '@fastgpt/global/core/dataset/apiDataset';
import { useApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset/api';
import { type NextApiRequest } from 'next';
import { authCert } from '@fastgpt/service/support/permission/auth/common';
export type GetApiDatasetCataLogProps = {
searchKey?: string;
parentId?: ParentIdType;
yuqueServer?: YuqueServer;
feishuServer?: FeishuServer;
@@ -27,21 +24,15 @@ async function handler(req: NextApiRequest) {
await authCert({ req, authToken: true });
const data = await (async () => {
if (apiServer) {
return useApiDatasetRequest({ apiServer }).listFiles({ searchKey, parentId });
}
if (feishuServer || yuqueServer) {
return getProApiDatasetFileListRequest({
feishuServer,
yuqueServer,
parentId
});
}
return Promise.reject(DatasetErrEnum.noApiServer);
})();
const data = await (
await getApiDatasetRequest({
feishuServer,
yuqueServer,
apiServer
})
).listFiles({ parentId, searchKey });
return data.filter((item: APIFileItem) => item.hasChild === true);
return data?.filter((item: APIFileItem) => item.hasChild === true) || [];
}
export default NextAPI(handler);

View File

@@ -7,12 +7,11 @@ import type {
FeishuServer,
ApiDatasetDetailResponse
} from '@fastgpt/global/core/dataset/apiDataset';
import { getProApiDatasetFileDetailRequest } from '@/service/core/dataset/apiDataset/controller';
import { getApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset';
import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next';
import { authCert } from '@fastgpt/service/support/permission/auth/common';
import { authDataset } from '@fastgpt/service/support/permission/dataset/auth';
import { ManagePermissionVal } from '@fastgpt/global/support/permission/constant';
import { useApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset/api';
export type GetApiDatasetPathQuery = {};
@@ -86,26 +85,21 @@ async function handler(
}
})();
if (!apiServer && !feishuServer && !yuqueServer) {
return Promise.reject(DatasetErrEnum.noApiServer);
}
if (feishuServer) {
return '';
}
if (apiServer) {
return await getFullPath(parentId, useApiDatasetRequest({ apiServer }).getFileDetail);
}
if (yuqueServer || apiServer) {
const apiDataset = await getApiDatasetRequest({
yuqueServer,
apiServer
});
if (yuqueServer) {
const yuqueFileGetter = async ({ apiFileId }: { apiFileId: string }) => {
return await getProApiDatasetFileDetailRequest({
yuqueServer,
apiFileId
});
};
return await getFullPath(parentId, yuqueFileGetter);
if (!apiDataset?.getFileDetail) {
return Promise.reject(DatasetErrEnum.noApiServer);
}
return await getFullPath(parentId, apiDataset.getFileDetail);
}
return Promise.reject(new Error(DatasetErrEnum.noApiServer));

View File

@@ -2,7 +2,7 @@ import { NextAPI } from '@/service/middleware/entry';
import { DatasetErrEnum } from '@fastgpt/global/common/error/code/dataset';
import { type ParentIdType } from '@fastgpt/global/common/parentFolder/type';
import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant';
import { useApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset/api';
import { getApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset';
import { authDataset } from '@fastgpt/service/support/permission/dataset/auth';
import { type NextApiRequest } from 'next';
@@ -27,18 +27,13 @@ async function handler(req: NextApiRequest) {
const feishuServer = dataset.feishuServer;
const yuqueServer = dataset.yuqueServer;
if (apiServer) {
return useApiDatasetRequest({ apiServer }).listFiles({ searchKey, parentId });
}
if (feishuServer || yuqueServer) {
return global.getProApiDatasetFileList({
feishuServer,
return (
await getApiDatasetRequest({
apiServer,
yuqueServer,
parentId
});
}
return Promise.reject(DatasetErrEnum.noApiServer);
feishuServer
})
).listFiles({ searchKey, parentId });
}
export default NextAPI(handler);

View File

@@ -9,7 +9,7 @@ import { type OutLinkChatAuthProps } from '@fastgpt/global/support/permission/ch
import { DatasetErrEnum } from '@fastgpt/global/common/error/code/dataset';
import { authChatCrud, authCollectionInChat } from '@/service/support/permission/auth/chat';
import { getCollectionWithDataset } from '@fastgpt/service/core/dataset/controller';
import { useApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset/api';
import { getApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset';
export type readCollectionSourceQuery = {};
@@ -98,21 +98,15 @@ async function handler(
const feishuServer = collection.dataset.feishuServer;
const yuqueServer = collection.dataset.yuqueServer;
if (apiServer) {
return useApiDatasetRequest({ apiServer }).getFilePreviewUrl({
apiFileId: collection.apiFileId
});
}
if (feishuServer || yuqueServer) {
return global.getProApiDatasetFilePreviewUrl({
apiFileId: collection.apiFileId,
return (
await getApiDatasetRequest({
apiServer,
feishuServer,
yuqueServer
});
}
return '';
})
).getFilePreviewUrl({
apiFileId: collection.apiFileId
});
}
if (collection.type === DatasetCollectionTypeEnum.externalFile) {
if (collection.externalFileId && collection.dataset.externalReadUrl) {

View File

@@ -66,10 +66,7 @@ const Dataset = () => {
const onSelectDatasetType = useCallback(
(e: CreateDatasetType) => {
if (
!feConfigs?.isPlus &&
[DatasetTypeEnum.websiteDataset, DatasetTypeEnum.feishu, DatasetTypeEnum.yuque].includes(e)
) {
if (!feConfigs?.isPlus && [DatasetTypeEnum.websiteDataset].includes(e)) {
return toast({
status: 'warning',
title: t('common:commercial_function_tip')

View File

@@ -20,12 +20,6 @@ import {
type ConcatUsageProps,
type CreateUsageProps
} from '@fastgpt/global/support/wallet/usage/api';
import {
getProApiDatasetFileContentRequest,
getProApiDatasetFileDetailRequest,
getProApiDatasetFileListRequest,
getProApiDatasetFilePreviewUrlRequest
} from '@/service/core/dataset/apiDataset/controller';
import { isProVersion } from './constants';
export const readConfigData = async (name: string) => {
@@ -77,11 +71,6 @@ export function initGlobalVariables() {
if (!isProVersion()) return;
return POST('/support/wallet/usage/concatUsage', data);
};
global.getProApiDatasetFileList = getProApiDatasetFileListRequest;
global.getProApiDatasetFileContent = getProApiDatasetFileContentRequest;
global.getProApiDatasetFilePreviewUrl = getProApiDatasetFilePreviewUrlRequest;
global.getProApiDatasetFileDetail = getProApiDatasetFileDetailRequest;
}
global.communityPlugins = [];

View File

@@ -1,49 +0,0 @@
import type {
APIFileItem,
ApiFileReadContentResponse,
ApiDatasetDetailResponse
} from '@fastgpt/global/core/dataset/apiDataset';
import { POST } from '@fastgpt/service/common/api/plusRequest';
import {
type GetProApiDatasetFileContentParams,
type GetProApiDatasetFileDetailParams,
type GetProApiDatasetFileListParams,
type GetProApiDatasetFilePreviewUrlParams,
ProApiDatasetOperationTypeEnum
} from '@fastgpt/service/core/dataset/apiDataset/proApi';
export const getProApiDatasetFileListRequest = async (data: GetProApiDatasetFileListParams) => {
const res = await POST<APIFileItem[]>('/core/dataset/systemApiDataset', {
type: ProApiDatasetOperationTypeEnum.LIST,
...data
});
return res;
};
export const getProApiDatasetFileContentRequest = async (
data: GetProApiDatasetFileContentParams
) => {
const res = await POST<ApiFileReadContentResponse>('/core/dataset/systemApiDataset', {
type: ProApiDatasetOperationTypeEnum.CONTENT,
...data
});
return res;
};
export const getProApiDatasetFilePreviewUrlRequest = async (
data: GetProApiDatasetFilePreviewUrlParams
) => {
const res = await POST<string>('/core/dataset/systemApiDataset', {
type: ProApiDatasetOperationTypeEnum.READ,
...data
});
return res;
};
export const getProApiDatasetFileDetailRequest = async (data: GetProApiDatasetFileDetailParams) => {
const res = await POST<ApiDatasetDetailResponse>('/core/dataset/systemApiDataset', {
type: ProApiDatasetOperationTypeEnum.DETAIL,
...data
});
return res;
};