Skip to content

Commit 4cb513d

Browse files
committed
feat: enhance Tool API to return folder and tool structure for a given folder ID
1 parent 115e110 commit 4cb513d

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

apps/tools/serializers/tool.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from common.utils.tool_code import ToolExecutor
1919
from maxkb.const import CONFIG
2020
from tools.models import Tool, ToolScope, ToolFolder
21+
from tools.serializers.tool_folder import ToolFolderTreeSerializer
2122

2223
tool_executor = ToolExecutor(CONFIG.get('SANDBOX'))
2324

@@ -325,14 +326,25 @@ def get_tools(self, folder_id):
325326
self.is_valid(raise_exception=True)
326327
if not folder_id:
327328
folder_id = 'root'
328-
root = ToolFolder.objects.filter(id=folder_id).first()
329-
if not root:
329+
# 获取当前文件夹
330+
current_folder = ToolFolder.objects.filter(id=folder_id).first()
331+
if not current_folder:
330332
raise serializers.ValidationError(_('Folder not found'))
331-
# 使用MPTT的get_descendants()方法获取所有相关节点
332-
all_folders = root.get_descendants(include_self=True)
333333

334-
tools = QuerySet(Tool).filter(workspace_id=self.data.get('workspace_id'), folder_id__in=all_folders)
335-
return ToolModelSerializer(tools, many=True).data
334+
# 获取当前文件夹下的直接子文件夹
335+
child_folders = ToolFolder.objects.filter(parent=current_folder)
336+
folders_data = ToolFolderTreeSerializer(child_folders, many=True).data
337+
338+
# 获取当前文件夹下的工具
339+
tools = QuerySet(Tool).filter(Q(workspace_id=self.data.get('workspace_id')) &
340+
Q(folder_id=folder_id))
341+
tools_data = ToolModelSerializer(tools, many=True).data
342+
343+
# 返回包含文件夹和工具的结构
344+
return {
345+
'folders': folders_data,
346+
'tools': tools_data,
347+
}
336348

337349
class Query(serializers.Serializer):
338350
workspace_id = serializers.CharField(required=True, label=_('workspace id'))

0 commit comments

Comments
 (0)