Skip to content

Commit f0903ac

Browse files
committed
refactor: enhance ToolTreeSerializer query parameters
1 parent 6411f32 commit f0903ac

File tree

2 files changed

+62
-49
lines changed

2 files changed

+62
-49
lines changed

apps/tools/serializers/tool.py

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from rest_framework import serializers, status
1717

1818
from common.database_model_manage.database_model_manage import DatabaseModelManage
19-
from common.db.search import page_search, native_page_search
19+
from common.db.search import page_search, native_page_search, native_search
2020
from common.exception.app_exception import AppApiException
2121
from common.field.common import UploadedImageField
2222
from common.result import result
@@ -28,7 +28,6 @@
2828
from system_manage.models import AuthTargetType, WorkspaceUserResourcePermission
2929
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
3030
from tools.models import Tool, ToolScope, ToolFolder, ToolType
31-
from tools.serializers.tool_folder import ToolFolderFlatSerializer
3231
from users.serializers.user import is_workspace_manage
3332

3433
tool_executor = ToolExecutor(CONFIG.get('SANDBOX'))
@@ -537,36 +536,6 @@ def add(self, instance, with_valid=True):
537536

538537

539538
class ToolTreeSerializer(serializers.Serializer):
540-
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
541-
scope = serializers.CharField(required=True, label=_('scope'))
542-
543-
def get_tools(self, folder_id):
544-
self.is_valid(raise_exception=True)
545-
if not folder_id:
546-
folder_id = self.data.get('workspace_id')
547-
# 获取当前文件夹
548-
current_folder = ToolFolder.objects.filter(id=folder_id).first()
549-
if not current_folder:
550-
raise serializers.ValidationError(_('Folder not found'))
551-
552-
# 获取当前文件夹下的直接子文件夹
553-
child_folders = ToolFolder.objects.filter(parent=current_folder)
554-
folders_data = ToolFolderFlatSerializer(child_folders, many=True).data
555-
556-
# 获取当前文件夹下的工具
557-
tools = QuerySet(Tool).filter(
558-
Q(workspace_id=self.data.get('workspace_id')) &
559-
Q(scope=self.data.get('scope')) &
560-
Q(folder_id=folder_id)
561-
)
562-
tools_data = ToolModelSerializer(tools, many=True).data
563-
564-
# 返回包含文件夹和工具的结构
565-
return {
566-
'folders': folders_data,
567-
'tools': tools_data,
568-
}
569-
570539
class Query(serializers.Serializer):
571540
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
572541
folder_id = serializers.CharField(required=True, label=_('folder id'))
@@ -677,3 +646,36 @@ def page_tool_with_folders(self, current_page: int, page_size: int):
677646
'init_field_list': json.loads(record.get('init_field_list', '[]')),
678647
},
679648
)
649+
650+
def get_tools(self):
651+
self.is_valid(raise_exception=True)
652+
653+
workspace_manage = is_workspace_manage(self.data.get('user_id'), self.data.get('workspace_id'))
654+
is_x_pack_ee = self.is_x_pack_ee()
655+
results = native_search(
656+
self.get_query_set(workspace_manage, is_x_pack_ee),
657+
get_file_content(
658+
os.path.join(
659+
PROJECT_DIR,
660+
"apps", "tools", 'sql',
661+
'list_tool.sql' if workspace_manage else (
662+
'list_tool_user_ee.sql' if is_x_pack_ee else 'list_tool_user.sql'
663+
)
664+
)
665+
),
666+
667+
)
668+
669+
# 返回包含文件夹和工具的结构
670+
return {
671+
'folders': [
672+
folder for folder in results if folder['resource_type'] == 'folder'
673+
],
674+
'tools': [
675+
{
676+
**tool,
677+
'input_field_list': json.loads(tool.get('input_field_list', '[]')),
678+
'init_field_list': json.loads(tool.get('init_field_list', '[]')),
679+
} for tool in results if tool['resource_type'] == 'tool'
680+
],
681+
}

apps/tools/views/tool.py

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,16 @@ def post(self, request: Request, workspace_id: str):
6767
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), RoleConstants.USER.get_workspace_role()
6868
)
6969
def get(self, request: Request, workspace_id: str):
70-
return result.success(ToolTreeSerializer(
71-
data={'workspace_id': workspace_id, 'scope': ToolScope.WORKSPACE, 'user_id': request.user.id}
72-
).get_tools(request.query_params.get('folder_id')))
70+
return result.success(ToolTreeSerializer.Query(
71+
data={
72+
'workspace_id': workspace_id,
73+
'folder_id': request.query_params.get('folder_id'),
74+
'name': request.query_params.get('name'),
75+
'scope': request.query_params.get('scope', ToolScope.WORKSPACE),
76+
'user_id': request.user.id,
77+
'create_user': request.query_params.get('create_user'),
78+
}
79+
).get_tools())
7380

7481
class Debug(APIView):
7582
authentication_classes = [TokenAuth]
@@ -111,8 +118,8 @@ class Operate(APIView):
111118
PermissionConstants.TOOL_EDIT.get_workspace_permission_workspace_manage_role(),
112119
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
113120
ViewPermission([RoleConstants.USER.get_workspace_role()],
114-
[PermissionConstants.TOOL.get_workspace_tool_permission()],
115-
CompareConstants.AND),
121+
[PermissionConstants.TOOL.get_workspace_tool_permission()],
122+
CompareConstants.AND),
116123
)
117124
@log(
118125
menu='Tool', operate='Update tool',
@@ -136,9 +143,10 @@ def put(self, request: Request, workspace_id: str, tool_id: str):
136143
@has_permissions(
137144
PermissionConstants.TOOL_READ.get_workspace_tool_permission(),
138145
PermissionConstants.TOOL_READ.get_workspace_permission_workspace_manage_role(),
139-
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), ViewPermission([RoleConstants.USER.get_workspace_role()],
140-
[PermissionConstants.TOOL.get_workspace_tool_permission()],
141-
CompareConstants.AND),
146+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
147+
ViewPermission([RoleConstants.USER.get_workspace_role()],
148+
[PermissionConstants.TOOL.get_workspace_tool_permission()],
149+
CompareConstants.AND),
142150
)
143151
@log(menu='Tool', operate='Get tool')
144152
def get(self, request: Request, workspace_id: str, tool_id: str):
@@ -158,9 +166,10 @@ def get(self, request: Request, workspace_id: str, tool_id: str):
158166
@has_permissions(
159167
PermissionConstants.TOOL_DELETE.get_workspace_tool_permission(),
160168
PermissionConstants.TOOL_DELETE.get_workspace_permission_workspace_manage_role(),
161-
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), ViewPermission([RoleConstants.USER.get_workspace_role()],
162-
[PermissionConstants.TOOL.get_workspace_tool_permission()],
163-
CompareConstants.AND),
169+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
170+
ViewPermission([RoleConstants.USER.get_workspace_role()],
171+
[PermissionConstants.TOOL.get_workspace_tool_permission()],
172+
CompareConstants.AND),
164173
)
165174
@log(
166175
menu='Tool', operate="Delete tool",
@@ -242,9 +251,10 @@ class Export(APIView):
242251
@has_permissions(
243252
PermissionConstants.TOOL_EXPORT.get_workspace_tool_permission(),
244253
PermissionConstants.TOOL_EXPORT.get_workspace_permission_workspace_manage_role(),
245-
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), ViewPermission([RoleConstants.USER.get_workspace_role()],
246-
[PermissionConstants.TOOL.get_workspace_tool_permission()],
247-
CompareConstants.AND),
254+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
255+
ViewPermission([RoleConstants.USER.get_workspace_role()],
256+
[PermissionConstants.TOOL.get_workspace_tool_permission()],
257+
CompareConstants.AND),
248258
)
249259
@log(
250260
menu='Tool', operate="Export tool",
@@ -296,9 +306,10 @@ class EditIcon(APIView):
296306
@has_permissions(
297307
PermissionConstants.TOOL_EDIT.get_workspace_tool_permission(),
298308
PermissionConstants.TOOL_EDIT.get_workspace_permission_workspace_manage_role(),
299-
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), ViewPermission([RoleConstants.USER.get_workspace_role()],
300-
[PermissionConstants.TOOL.get_workspace_tool_permission()],
301-
CompareConstants.AND),
309+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
310+
ViewPermission([RoleConstants.USER.get_workspace_role()],
311+
[PermissionConstants.TOOL.get_workspace_tool_permission()],
312+
CompareConstants.AND),
302313
)
303314
def put(self, request: Request, tool_id: str, workspace_id: str):
304315
return result.success(ToolSerializer.IconOperate(data={

0 commit comments

Comments
 (0)