77from rest_framework import serializers
88
99from application .models .application import Application , ApplicationFolder
10+ from application .serializers .application import ApplicationOperateSerializer
1011from application .serializers .application_folder import ApplicationFolderTreeSerializer
1112from common .constants .permission_constants import Group , ResourcePermission , ResourcePermissionRole
13+ from common .exception .app_exception import AppApiException
1214from folders .api .folder import FolderCreateRequest
1315from knowledge .models import KnowledgeFolder , Knowledge
16+ from knowledge .serializers .knowledge import KnowledgeSerializer
1417from knowledge .serializers .knowledge_folder import KnowledgeFolderTreeSerializer
1518from system_manage .models import WorkspaceUserResourcePermission
1619from tools .models import ToolFolder , Tool
20+ from tools .serializers .tool import ToolSerializer
1721from tools .serializers .tool_folder import ToolFolderTreeSerializer
1822from users .serializers .user import is_workspace_manage
1923
@@ -34,7 +38,6 @@ def get_folder_type(source):
3438 return ToolFolder
3539 elif source == Group .APPLICATION .name :
3640 return ApplicationFolder
37- # return ApplicationFolder
3841 elif source == Group .KNOWLEDGE .name :
3942 return KnowledgeFolder
4043 else :
@@ -205,7 +208,7 @@ def delete(self):
205208 for node in nodes :
206209 # print(node)
207210 # 删除相关的资源
208- Source . objects . filter ( folder_id = node . id ). delete ( )
211+ self . delete_source ( node )
209212 # 删除节点
210213 node .delete ()
211214 # 普通用户删除的文件夹内全部都得是自己有权限的资源
@@ -223,11 +226,34 @@ def delete(self):
223226 Q (permission_list__overlap = [ResourcePermission .MANAGE , ResourcePermissionRole .ROLE ])
224227 ).count ()
225228 if auth_list != len (source_ids ):
226- raise serializers .ValidationError (_ ('This folder contains resources that you do not have permission to delete' ))
227- # print('Deleting folder:', node.id)
228- Source .objects .filter (folder_id = node .id ).delete ()
229+ raise AppApiException (500 , _ ('This folder contains resources that you dont have permission' ))
230+ self .delete_source (node )
229231 node .delete ()
230232
233+ def delete_source (self , node ):
234+ Source = get_source_type (self .data .get ('source' )) # noqa
235+ source_ids = Source .objects .filter (folder_id = node .id ).values_list ('id' , flat = True )
236+ source = self .data .get ('source' )
237+
238+ for source_id in source_ids :
239+ if source == Group .TOOL .name :
240+ ToolSerializer .Operate (data = {
241+ 'workspace_id' : self .data .get ('workspace_id' ),
242+ 'id' : source_id ,
243+ }).delete ()
244+ elif source == Group .APPLICATION .name :
245+ ApplicationOperateSerializer (data = {
246+ 'workspace_id' : self .data .get ('workspace_id' ),
247+ 'application_id' : source_id ,
248+ 'user_id' : self .data .get ('user_id' ),
249+ }).delete ()
250+ elif source == Group .KNOWLEDGE .name :
251+ KnowledgeSerializer .Operate (data = {
252+ 'workspace_id' : self .data .get ('workspace_id' ),
253+ 'knowledge_id' : source_id ,
254+ 'user_id' : self .data .get ('user_id' ),
255+ }).delete ()
256+
231257
232258class FolderTreeSerializer (serializers .Serializer ):
233259 workspace_id = serializers .CharField (required = True , allow_null = True , allow_blank = True , label = _ ('workspace id' ))
0 commit comments