1515from rest_framework .views import APIView
1616
1717from application .api .application_api import ApplicationCreateAPI , ApplicationQueryAPI , ApplicationImportAPI , \
18- ApplicationExportAPI , ApplicationOperateAPI , ApplicationEditAPI , TextToSpeechAPI , SpeechToTextAPI , PlayDemoTextAPI
18+ ApplicationExportAPI , ApplicationOperateAPI , ApplicationEditAPI , TextToSpeechAPI , SpeechToTextAPI , PlayDemoTextAPI , \
19+ ApplicationBatchOperateAPI
1920from application .models import Application
20- from application .serializers .application import ApplicationSerializer , Query , ApplicationOperateSerializer
21+ from application .serializers .application import ApplicationSerializer , Query , ApplicationOperateSerializer , \
22+ ApplicationBatchOperateSerializer
2123from common import result
2224from common .auth import TokenAuth
23- from common .auth .authentication import has_permissions , get_is_permissions
25+ from common .auth .authentication import has_permissions , get_is_permissions , check_batch_permissions
2426from common .constants .permission_constants import PermissionConstants , RoleConstants , ViewPermission , CompareConstants
2527from common .log .log import log
2628from tools .api .tool import GetInternalToolAPI
@@ -35,6 +37,16 @@ def get_application_operation_object(application_id):
3537 return {}
3638
3739
40+ def get_application_operation_object_batch (application_id_list ):
41+ application_model_list = QuerySet (model = Application ).filter (id__in = application_id_list )
42+ if application_model_list is not None :
43+ return {
44+ "name" : f'[{ "," .join ([app .name for app in application_model_list ])} ]' ,
45+ 'application_list' : [{'name' : app .name } for app in application_model_list ]
46+ }
47+ return {}
48+
49+
3850class ApplicationAPI (APIView ):
3951 authentication_classes = [TokenAuth ]
4052
@@ -296,6 +308,81 @@ def get(self, request: Request):
296308 'name' : request .query_params .get ('name' , '' ),
297309 }).get_appstore_templates ())
298310
311+ class BatchDelete (APIView ):
312+ authentication_classes = [TokenAuth ]
313+
314+ @extend_schema (
315+ methods = ['PUT' ],
316+ description = _ ("Batch delete applications" ),
317+ summary = _ ("Batch delete applications" ),
318+ operation_id = _ ("Batch delete applications" ),
319+ parameters = ApplicationBatchOperateAPI .get_parameters (),
320+ request = ApplicationBatchOperateAPI .get_request (),
321+ responses = result .DefaultResultSerializer ,
322+ tags = [_ ('Application' )]
323+ )
324+ @has_permissions (PermissionConstants .APPLICATION_BATCH_DELETE .get_workspace_permission (),
325+ RoleConstants .USER .get_workspace_role (),
326+ RoleConstants .WORKSPACE_MANAGE .get_workspace_role ()
327+ )
328+ def put (self , request : Request , workspace_id : str ):
329+ id_list = request .data .get ('id_list' , [])
330+ permitted_ids = check_batch_permissions (
331+ request , id_list , 'application_id' ,
332+ (PermissionConstants .APPLICATION_DELETE .get_workspace_application_permission (),
333+ PermissionConstants .APPLICATION_DELETE .get_workspace_permission_workspace_manage_role (),
334+ ViewPermission ([RoleConstants .USER .get_workspace_role ()],
335+ [PermissionConstants .APPLICATION .get_workspace_application_permission ()],
336+ CompareConstants .AND ),
337+ RoleConstants .WORKSPACE_MANAGE .get_workspace_role ()), workspace_id = workspace_id
338+ )
339+ @log (menu = 'Application' , operate = 'Batch delete applications' ,
340+ get_operation_object = lambda r , k : get_application_operation_object_batch (permitted_ids ))
341+ def inner (view ,r , ** kwargs ):
342+ return ApplicationBatchOperateSerializer (
343+ data = {'workspace_id' : workspace_id , 'user_id' : request .user .id }
344+ ).batch_delete ({'id_list' : permitted_ids })
345+
346+ return result .success (inner (self ,request , workspace_id = workspace_id ))
347+
348+ class BatchMove (APIView ):
349+ authentication_classes = [TokenAuth ]
350+
351+ @extend_schema (
352+ methods = ['PUT' ],
353+ description = _ ("Batch move applications" ),
354+ summary = _ ("Batch move applications" ),
355+ operation_id = _ ("Batch move applications" ),
356+ parameters = ApplicationBatchOperateAPI .get_parameters (),
357+ request = ApplicationBatchOperateAPI .get_move_request (),
358+ responses = result .DefaultResultSerializer ,
359+ tags = [_ ('Application' )]
360+ )
361+ @has_permissions (PermissionConstants .APPLICATION_BATCH_MOVE .get_workspace_permission (),
362+ RoleConstants .USER .get_workspace_role (),
363+ RoleConstants .WORKSPACE_MANAGE .get_workspace_role ()
364+ )
365+ def put (self , request : Request , workspace_id : str ):
366+ id_list = request .data .get ('id_list' , [])
367+ permitted_ids = check_batch_permissions (
368+ request , id_list , 'application_id' ,
369+ (PermissionConstants .APPLICATION_EDIT .get_workspace_application_permission (),
370+ PermissionConstants .APPLICATION_EDIT .get_workspace_permission_workspace_manage_role (),
371+ ViewPermission ([RoleConstants .USER .get_workspace_role ()],
372+ [PermissionConstants .APPLICATION .get_workspace_application_permission ()],
373+ CompareConstants .AND ),
374+ RoleConstants .WORKSPACE_MANAGE .get_workspace_role ()),
375+ workspace_id = workspace_id
376+ )
377+
378+ @log (menu = 'Application' , operate = 'Batch move applications' ,
379+ get_operation_object = lambda r , k : get_application_operation_object_batch (permitted_ids ))
380+ def inner (view ,r , ** kwargs ):
381+ return ApplicationBatchOperateSerializer (
382+ data = {'workspace_id' : workspace_id , 'user_id' : request .user .id }
383+ ).batch_move ({'id_list' : permitted_ids , 'folder_id' : request .data .get ('folder_id' )})
384+
385+ return result .success (inner (self ,request , workspace_id = workspace_id ))
299386
300387class McpServers (APIView ):
301388 authentication_classes = [TokenAuth ]
0 commit comments