feat: implement source type retrieval and enhance folder deletion logic

This commit is contained in:
CaptainB 2025-05-09 18:31:08 +08:00
parent 1f8907e1cb
commit f6ccc95240

View File

@ -8,12 +8,24 @@ from rest_framework import serializers
from common.constants.permission_constants import Group
from folders.api.folder import FolderCreateRequest
from knowledge.models import KnowledgeFolder
from knowledge.models import KnowledgeFolder, Knowledge
from knowledge.serializers.knowledge_folder import KnowledgeFolderTreeSerializer
from tools.models import ToolFolder
from tools.models import ToolFolder, Tool
from tools.serializers.tool_folder import ToolFolderTreeSerializer
def get_source_type(source):
if source == Group.TOOL.name:
return Tool
elif source == Group.APPLICATION.name:
# todo app folder
return None
elif source == Group.KNOWLEDGE.name:
return Knowledge
else:
return None
def get_folder_type(source):
if source == Group.TOOL.name:
return ToolFolder
@ -154,12 +166,20 @@ class FolderSerializer(serializers.Serializer):
folder = QuerySet(Folder).filter(id=self.data.get('id')).first()
return FolderSerializer(folder).data
@transaction.atomic
def delete(self):
self.is_valid(raise_exception=True)
if self.data.get('id') == 'root':
raise serializers.ValidationError(_('Cannot delete root folder'))
Folder = get_folder_type(self.data.get('source')) # noqa
QuerySet(Folder).filter(id=self.data.get('id')).delete()
Source = get_source_type(self.data.get('source')) # noqa
nodes = Folder.objects.filter(id=self.data.get('id')).get_descendants(include_self=True)
for node in nodes:
# print(node)
# 删除相关的资源
Source.objects.filter(folder_id=node.id).delete()
# 删除节点
node.delete()
class FolderTreeSerializer(serializers.Serializer):