Skip to content

Commit 7780d89

Browse files
committed
feat: add pagination method for tools with folder data in tool.py
1 parent d7b61c6 commit 7780d89

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

apps/tools/serializers/tool.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ class Query(serializers.Serializer):
394394
name = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_('tool name'))
395395
tool_type = serializers.CharField(required=True, label=_('tool type'))
396396

397-
def page(self, current_page: int, page_size: int):
397+
def page_tool(self, current_page: int, page_size: int):
398398
self.is_valid(raise_exception=True)
399399

400400
folder_id = self.data.get('folder_id', 'root')
@@ -414,3 +414,28 @@ def page(self, current_page: int, page_size: int):
414414
Q(folder_id__in=all_folders) &
415415
Q(tool_type=self.data.get('tool_type')))
416416
return page_search(current_page, page_size, tools, lambda record: ToolModelSerializer(record).data)
417+
418+
def page_tool_with_folders(self, current_page: int, page_size: int):
419+
self.is_valid(raise_exception=True)
420+
421+
folder_id = self.data.get('folder_id', 'root')
422+
root = ToolFolder.objects.filter(id=folder_id).first()
423+
if not root:
424+
raise serializers.ValidationError(_('Folder not found'))
425+
# 获取当前文件夹下的直接子文件夹
426+
child_folders = ToolFolder.objects.filter(parent=root)
427+
folders_data = ToolFolderFlatSerializer(child_folders, many=True).data
428+
429+
if self.data.get('name'):
430+
tools = QuerySet(Tool).filter(Q(workspace_id=self.data.get('workspace_id')) &
431+
Q(folder_id=root) &
432+
Q(tool_type=self.data.get('tool_type')) &
433+
Q(name__contains=self.data.get('name')))
434+
else:
435+
tools = QuerySet(Tool).filter(Q(workspace_id=self.data.get('workspace_id')) &
436+
Q(folder_id=root) &
437+
Q(tool_type=self.data.get('tool_type')))
438+
return {
439+
'tools': page_search(current_page, page_size, tools, lambda record: ToolModelSerializer(record).data),
440+
'folders': folders_data
441+
}

apps/tools/views/tool.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def get(self, request: Request, workspace_id: str, current_page: int, page_size:
135135
'name': request.query_params.get('name'),
136136
'tool_type': request.query_params.get('tool_type'),
137137
}
138-
).page(current_page, page_size))
138+
).page_tool_with_folders(current_page, page_size))
139139

140140
class Import(APIView):
141141
authentication_classes = [TokenAuth]

0 commit comments

Comments
 (0)