Skip to content

Commit 070a5d4

Browse files
committed
refactor: user add batch delete
1 parent efd273b commit 070a5d4

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

apps/users/api/user.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ def get_parameters():
129129
required=True,
130130
)]
131131

132+
@staticmethod
133+
def get_request():
134+
return serializers.ListSerializer(child=serializers.CharField(required=True), required=True,
135+
label=_('User IDs'))
136+
132137

133138
class ChangeUserPasswordApi(APIMixin):
134139
@staticmethod

apps/users/serializers/user.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,18 @@ def get_user_list(self, workspace_id):
403403
users = User.objects.filter(id__in=user_ids).values('id', 'nick_name')
404404
return list(users)
405405

406+
class BatchDelete(serializers.Serializer):
407+
ids = serializers.ListField(required=True, label=_('User IDs'))
408+
409+
def batch_delete(self, with_valid=True):
410+
if with_valid:
411+
self.is_valid(raise_exception=True)
412+
ids = self.data.get('ids')
413+
if not ids:
414+
raise AppApiException(1004, _('User IDs cannot be empty'))
415+
User.objects.filter(id__in=ids).delete()
416+
return True
417+
406418

407419
def update_user_role(instance, user):
408420
workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping")

apps/users/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
path('workspace/<str:workspace_id>/user/profile', views.TestWorkspacePermissionUserView.as_view(),
1414
name="test_workspace_id_permission"),
1515
path("user_manage", views.UserManage.as_view(), name="user_manage"),
16+
path("user_manage/batch_delete", views.UserManage.BatchDelete.as_view()),
1617
path("user_manage/password", views.UserManage.Password.as_view()),
1718
path("user_manage/<str:user_id>", views.UserManage.Operate.as_view(), name="user_manage_operate"),
1819
path("user_manage/<str:user_id>/re_password", views.UserManage.RePassword.as_view(),

apps/users/views/user.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,20 @@ def put(self, request: Request, user_id):
145145
return result.success(
146146
UserManageSerializer.Operate(data={'id': user_id}).edit(request.data, with_valid=True))
147147

148+
class BatchDelete(APIView):
149+
authentication_classes = [TokenAuth]
150+
151+
@extend_schema(methods=['POST'],
152+
description=_("Batch delete user"),
153+
summary=_("Batch delete user"),
154+
operation_id=_("Batch delete user"), # type: ignore
155+
tags=[_("User Management")], # type: ignore
156+
request=DeleteUserApi.get_request(),
157+
responses=DefaultModelResponse.get_response())
158+
@has_permissions(PermissionConstants.USER_DELETE)
159+
def post(self, request: Request):
160+
return result.success(UserManageSerializer.BatchDelete(data=request.data).batch_delete(with_valid=True))
161+
148162
class RePassword(APIView):
149163
authentication_classes = [TokenAuth]
150164

0 commit comments

Comments
 (0)