Skip to content

Commit

Permalink
feat: add batch create preview api (#1680)
Browse files Browse the repository at this point in the history
  • Loading branch information
narasux authored Apr 28, 2024
1 parent ca72306 commit 8cbfa3b
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
OptionalTenantUserListInputSLZ,
OptionalTenantUserListOutputSLZ,
TenantUserBatchCreateInputSLZ,
TenantUserBatchCreatePreviewInputSLZ,
TenantUserBatchCreatePreviewOutputSLZ,
TenantUserBatchDeleteInputSLZ,
TenantUserCreateInputSLZ,
TenantUserCreateOutputSLZ,
Expand Down Expand Up @@ -79,6 +81,8 @@
"TenantUserOrganizationPathOutputSLZ",
"TenantUserStatusUpdateOutputSLZ",
"TenantUserBatchCreateInputSLZ",
"TenantUserBatchCreatePreviewInputSLZ",
"TenantUserBatchCreatePreviewOutputSLZ",
"TenantUserBatchDeleteInputSLZ",
# 租户部门 - 用户关系
"TenantDeptUserRelationBatchCreateInputSLZ",
Expand Down
13 changes: 13 additions & 0 deletions src/bk-user/bkuser/apis/web/organization/serializers/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,19 @@ def _validate_user_infos(
).is_valid(raise_exception=True)


class TenantUserBatchCreatePreviewInputSLZ(TenantUserBatchCreateInputSLZ):
...


class TenantUserBatchCreatePreviewOutputSLZ(serializers.Serializer):
username = serializers.CharField(help_text="用户名")
full_name = serializers.CharField(help_text="姓名")
email = serializers.EmailField(help_text="邮箱")
phone = serializers.CharField(help_text="手机号")
phone_country_code = serializers.CharField(help_text="手机国际区号")
extras = serializers.JSONField(help_text="自定义字段")


class TenantUserBatchDeleteInputSLZ(serializers.Serializer):
user_ids = StringArrayField(
help_text="用户 ID 列表", min_items=1, max_items=settings.ORGANIZATION_BATCH_OPERATION_API_LIMIT
Expand Down
6 changes: 6 additions & 0 deletions src/bk-user/bkuser/apis/web/organization/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,12 @@
views.TenantUserBatchCreateApi.as_view(),
name="organization.tenant_user.batch_create",
),
# 租户用户 - 快速录入 - 预览
path(
"tenants/users/operations/batch_create_preview/",
views.TenantUserBatchCreatePreviewApi.as_view(),
name="organization.tenant_user.batch_create_preview",
),
# 租户用户 - 批量删除
path(
"tenants/users/operations/batch_delete/",
Expand Down
2 changes: 2 additions & 0 deletions src/bk-user/bkuser/apis/web/organization/views/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
from .users import (
OptionalTenantUserListApi,
TenantUserBatchCreateApi,
TenantUserBatchCreatePreviewApi,
TenantUserBatchDeleteApi,
TenantUserListCreateApi,
TenantUserOrganizationPathListApi,
Expand Down Expand Up @@ -56,6 +57,7 @@
"TenantUserOrganizationPathListApi",
"TenantUserStatusUpdateApi",
"TenantUserBatchCreateApi",
"TenantUserBatchCreatePreviewApi",
"TenantUserBatchDeleteApi",
# 租户部门 - 用户关系
"TenantDeptUserRelationBatchCreateApi",
Expand Down
32 changes: 30 additions & 2 deletions src/bk-user/bkuser/apis/web/organization/views/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
OptionalTenantUserListInputSLZ,
OptionalTenantUserListOutputSLZ,
TenantUserBatchCreateInputSLZ,
TenantUserBatchCreatePreviewInputSLZ,
TenantUserBatchCreatePreviewOutputSLZ,
TenantUserBatchDeleteInputSLZ,
TenantUserCreateInputSLZ,
TenantUserCreateOutputSLZ,
Expand Down Expand Up @@ -625,8 +627,7 @@ def post(self, request, *args, **kwargs):
data_source = self.get_current_tenant_local_real_data_source()

slz = TenantUserBatchCreateInputSLZ(
data=request.data,
context={"tenant_id": cur_tenant_id, "data_source_id": data_source.id},
data=request.data, context={"tenant_id": cur_tenant_id, "data_source_id": data_source.id}
)
slz.is_valid(raise_exception=True)
data = slz.validated_data
Expand Down Expand Up @@ -690,6 +691,33 @@ def post(self, request, *args, **kwargs):
return Response(status=status.HTTP_204_NO_CONTENT)


class TenantUserBatchCreatePreviewApi(CurrentUserTenantDataSourceMixin, generics.CreateAPIView):
"""批量创建租户用户 - 预览"""

permission_classes = [IsAuthenticated, perm_class(PermAction.MANAGE_TENANT)]

@swagger_auto_schema(
tags=["organization.user"],
operation_description="租户用户快速录入 - 预览",
request_body=TenantUserBatchCreatePreviewInputSLZ(),
responses={status.HTTP_200_OK: TenantUserBatchCreatePreviewOutputSLZ(many=True)},
)
def post(self, request, *args, **kwargs):
cur_tenant_id = self.get_current_tenant_id()
data_source = self.get_current_tenant_local_real_data_source()

slz = TenantUserBatchCreatePreviewInputSLZ(
data=request.data, context={"tenant_id": cur_tenant_id, "data_source_id": data_source.id}
)
slz.is_valid(raise_exception=True)
data = slz.validated_data

return Response(
TenantUserBatchCreatePreviewOutputSLZ(data["user_infos"], many=True).data,
status=status.HTTP_200_OK,
)


class TenantUserBatchDeleteApi(CurrentUserTenantDataSourceMixin, generics.DestroyAPIView):
"""批量删除租户用户"""

Expand Down

0 comments on commit 8cbfa3b

Please sign in to comment.