user.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎虎
  5. @file: user.py
  6. @date:2025/4/14 19:23
  7. @desc:
  8. """
  9. from drf_spectacular.types import OpenApiTypes
  10. from drf_spectacular.utils import OpenApiParameter
  11. from common.mixins.api_mixin import APIMixin
  12. from common.result import ResultSerializer, DefaultResultSerializer
  13. from users.serializers.user import UserProfileResponse, CreateUserSerializer, UserManageSerializer, \
  14. UserInstanceSerializer, RePasswordSerializer, CheckCodeSerializer, SendEmailSerializer
  15. from django.utils.translation import gettext_lazy as _
  16. from rest_framework import serializers
  17. class ApiUserProfileResponse(ResultSerializer):
  18. def get_data(self):
  19. return UserProfileResponse()
  20. class RoleSettingRequestSerializer(serializers.Serializer):
  21. role_id = serializers.CharField(required=True, label=_('Role ID'))
  22. workspace_ids = serializers.ListField(
  23. child=serializers.CharField(required=False),
  24. required=False,
  25. label=_('Workspace IDs')
  26. )
  27. class CreateUserRequestSerializer(CreateUserSerializer):
  28. role_setting = RoleSettingRequestSerializer(required=False, label=_('Role Setting'), allow_null=True, many=True)
  29. class UserProfileAPI(APIMixin):
  30. @staticmethod
  31. def get_response():
  32. return ApiUserProfileResponse
  33. @staticmethod
  34. def get_request():
  35. return CreateUserRequestSerializer
  36. @staticmethod
  37. def get_parameters():
  38. return [OpenApiParameter(
  39. name="user_id",
  40. description=_('User ID'),
  41. type=OpenApiTypes.STR,
  42. location=OpenApiParameter.PATH,
  43. required=True,
  44. )]
  45. class WorkspaceUserAPI(APIMixin):
  46. @staticmethod
  47. def get_parameters():
  48. return [OpenApiParameter(
  49. name="workspace_id",
  50. description=_('Workspace ID'),
  51. type=OpenApiTypes.STR,
  52. location=OpenApiParameter.PATH,
  53. required=True,
  54. )]
  55. @staticmethod
  56. def get_response():
  57. return WorkspaceUserListResponse
  58. class WorkspaceUser(serializers.Serializer):
  59. id = serializers.CharField(required=True, label=_('id'))
  60. username = serializers.CharField(required=True, label=_('Username'))
  61. class WorkspaceUserListResponse(ResultSerializer):
  62. def get_data(self):
  63. return WorkspaceUser(many=True)
  64. class UserPasswordResponse(APIMixin):
  65. @staticmethod
  66. def get_response():
  67. return PasswordResponse
  68. class Password(serializers.Serializer):
  69. password = serializers.CharField(required=True, label=_('Password'))
  70. class PasswordResponse(ResultSerializer):
  71. def get_data(self):
  72. return Password()
  73. class EditUserRequestSerializer(UserManageSerializer.UserEditInstance):
  74. role_setting = RoleSettingRequestSerializer(required=False, label=_('Role Setting'), allow_null=True, many=True)
  75. class EditUserApi(APIMixin):
  76. @staticmethod
  77. def get_parameters():
  78. return [OpenApiParameter(
  79. name="user_id",
  80. description=_('User ID'),
  81. type=OpenApiTypes.STR,
  82. location=OpenApiParameter.PATH,
  83. required=True,
  84. )]
  85. @staticmethod
  86. def get_request():
  87. return EditUserRequestSerializer
  88. class DeleteUserApi(APIMixin):
  89. @staticmethod
  90. def get_parameters():
  91. return [OpenApiParameter(
  92. name="user_id",
  93. description=_('User ID'),
  94. type=OpenApiTypes.STR,
  95. location=OpenApiParameter.PATH,
  96. required=True,
  97. )]
  98. @staticmethod
  99. def get_request():
  100. return serializers.ListSerializer(child=serializers.CharField(required=True), required=True,
  101. label=_('User IDs'))
  102. class ChangeUserPasswordApi(APIMixin):
  103. @staticmethod
  104. def get_request():
  105. return UserManageSerializer.RePasswordInstance
  106. class UserListResponse(ResultSerializer):
  107. def get_data(self):
  108. return UserInstanceSerializer(many=True)
  109. class UserPageApi(APIMixin):
  110. @staticmethod
  111. def get_parameters():
  112. return [OpenApiParameter(
  113. name="email_or_username",
  114. description=_('Email or Username'),
  115. type=OpenApiTypes.STR,
  116. location=OpenApiParameter.QUERY,
  117. required=False,
  118. )]
  119. @staticmethod
  120. def get_response():
  121. return UserListResponse
  122. class UserListApi(APIMixin):
  123. @staticmethod
  124. def get_parameters():
  125. return [OpenApiParameter(
  126. name="workspace_id",
  127. description=_('Workspace ID'),
  128. type=OpenApiTypes.STR,
  129. location=OpenApiParameter.PATH,
  130. required=False,
  131. )]
  132. @staticmethod
  133. def get_response():
  134. return UserListResponse
  135. class TestWorkspacePermissionUserApi(APIMixin):
  136. @staticmethod
  137. def get_parameters():
  138. return [OpenApiParameter(
  139. # 参数的名称是done
  140. name="workspace_id",
  141. # 对参数的备注
  142. description="工作空间id",
  143. # 指定参数的类型
  144. type=OpenApiTypes.STR,
  145. location=OpenApiParameter.PATH,
  146. # 指定必须给
  147. required=True,
  148. )]
  149. class ResetPasswordAPI(APIMixin):
  150. @staticmethod
  151. def get_request():
  152. return RePasswordSerializer
  153. class CheckCodeAPI(APIMixin):
  154. @staticmethod
  155. def get_request():
  156. return CheckCodeSerializer
  157. @staticmethod
  158. def get_response():
  159. return DefaultResultSerializer
  160. class SendEmailAPI(APIMixin):
  161. @staticmethod
  162. def get_request():
  163. return SendEmailSerializer
  164. @staticmethod
  165. def get_response():
  166. return DefaultResultSerializer
  167. class LanguageSerializer(serializers.Serializer):
  168. language = serializers.CharField(required=True, label=_('Language'))
  169. class SwitchUserLanguageAPI(APIMixin):
  170. @staticmethod
  171. def get_request():
  172. return LanguageSerializer