tag.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. from django.utils.translation import gettext_lazy as _
  2. from drf_spectacular.utils import extend_schema
  3. from rest_framework.request import Request
  4. from rest_framework.views import APIView
  5. from common.auth import TokenAuth
  6. from common.auth.authentication import has_permissions
  7. from common.constants.permission_constants import PermissionConstants, RoleConstants, ViewPermission, CompareConstants
  8. from common.log.log import log
  9. from common.result import result
  10. from knowledge.api.tag import TagCreateAPI, TagDeleteAPI, TagEditAPI
  11. from knowledge.serializers.common import get_knowledge_operation_object
  12. from knowledge.serializers.tag import TagSerializers
  13. class KnowledgeTagView(APIView):
  14. authentication_classes = [TokenAuth]
  15. @extend_schema(
  16. summary=_("Create Knowledge Tag"),
  17. description=_("Create a new knowledge tag"),
  18. parameters=TagCreateAPI.get_parameters(),
  19. request=TagCreateAPI.get_request(),
  20. responses=TagCreateAPI.get_response(),
  21. tags=[_('Knowledge Base/Tag')] # type: ignore
  22. )
  23. @has_permissions(
  24. PermissionConstants.KNOWLEDGE_TAG_CREATE.get_workspace_knowledge_permission(),
  25. PermissionConstants.KNOWLEDGE_TAG_CREATE.get_workspace_permission_workspace_manage_role(),
  26. RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
  27. ViewPermission([RoleConstants.USER.get_workspace_role()],
  28. [PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()], CompareConstants.AND),
  29. )
  30. @log(
  31. menu='tag', operate="Create a knowledge tag",
  32. get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id'))
  33. )
  34. def post(self, request: Request, workspace_id: str, knowledge_id: str):
  35. return result.success(TagSerializers.Create(
  36. data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'tags': request.data}
  37. ).insert())
  38. @extend_schema(
  39. summary=_("Get Knowledge Tag"),
  40. description=_("Get knowledge tag"),
  41. parameters=TagCreateAPI.get_parameters(),
  42. request=TagCreateAPI.get_request(),
  43. responses=TagCreateAPI.get_response(),
  44. tags=[_('Knowledge Base/Tag')] # type: ignore
  45. )
  46. @has_permissions(
  47. PermissionConstants.KNOWLEDGE_TAG_READ.get_workspace_knowledge_permission(),
  48. PermissionConstants.KNOWLEDGE_TAG_READ.get_workspace_permission_workspace_manage_role(),
  49. RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
  50. ViewPermission([RoleConstants.USER.get_workspace_role()],
  51. [PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()], CompareConstants.AND),
  52. )
  53. @log(
  54. menu='tag', operate="Create a knowledge tag",
  55. get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id'))
  56. )
  57. def get(self, request: Request, workspace_id: str, knowledge_id: str):
  58. return result.success(TagSerializers.Query(data={
  59. 'workspace_id': workspace_id,
  60. 'knowledge_id': knowledge_id,
  61. 'name': request.query_params.get('name')
  62. }).list())
  63. class Operate(APIView):
  64. authentication_classes = [TokenAuth]
  65. @extend_schema(
  66. summary=_("Update Knowledge Tag"),
  67. description=_("Update a knowledge tag"),
  68. parameters=TagEditAPI.get_parameters(),
  69. request=TagEditAPI.get_request(),
  70. responses=TagEditAPI.get_response(),
  71. tags=[_('Knowledge Base/Tag')] # type: ignore
  72. )
  73. @has_permissions(
  74. PermissionConstants.KNOWLEDGE_TAG_EDIT.get_workspace_knowledge_permission(),
  75. PermissionConstants.KNOWLEDGE_TAG_EDIT.get_workspace_permission_workspace_manage_role(),
  76. RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
  77. ViewPermission([RoleConstants.USER.get_workspace_role()],
  78. [PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()], CompareConstants.AND),
  79. )
  80. @log(
  81. menu='tag', operate="Update a knowledge tag",
  82. get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id'))
  83. )
  84. def put(self, request: Request, workspace_id: str, knowledge_id: str, tag_id: str):
  85. return result.success(TagSerializers.Operate(
  86. data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'tag_id': tag_id}
  87. ).edit(request.data))
  88. class Delete(APIView):
  89. authentication_classes = [TokenAuth]
  90. @extend_schema(
  91. summary=_("Delete Knowledge Tag"),
  92. description=_("Delete a knowledge tag"),
  93. parameters=TagDeleteAPI.get_parameters(),
  94. request=TagDeleteAPI.get_request(),
  95. responses=TagDeleteAPI.get_response(),
  96. tags=[_('Knowledge Base/Tag')] # type: ignore
  97. )
  98. @has_permissions(
  99. PermissionConstants.KNOWLEDGE_TAG_DELETE.get_workspace_knowledge_permission(),
  100. PermissionConstants.KNOWLEDGE_TAG_DELETE.get_workspace_permission_workspace_manage_role(),
  101. RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
  102. ViewPermission([RoleConstants.USER.get_workspace_role()],
  103. [PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()], CompareConstants.AND),
  104. )
  105. @log(
  106. menu='tag', operate="Delete a knowledge tag",
  107. get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id'))
  108. )
  109. def delete(self, request: Request, workspace_id: str, knowledge_id: str, tag_id: str, delete_type: str):
  110. return result.success(TagSerializers.Operate(
  111. data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'tag_id': tag_id}
  112. ).delete(delete_type))
  113. class BatchDelete(APIView):
  114. authentication_classes = [TokenAuth]
  115. @extend_schema(
  116. summary=_("Batch Delete Knowledge Tag"),
  117. description=_("Batch Delete a knowledge tag"),
  118. parameters=TagDeleteAPI.get_parameters(),
  119. request=TagDeleteAPI.get_request(),
  120. responses=TagDeleteAPI.get_response(),
  121. tags=[_('Knowledge Base/Tag')] # type: ignore
  122. )
  123. @has_permissions(
  124. PermissionConstants.KNOWLEDGE_TAG_DELETE.get_workspace_knowledge_permission(),
  125. PermissionConstants.KNOWLEDGE_TAG_DELETE.get_workspace_permission_workspace_manage_role(),
  126. RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
  127. ViewPermission([RoleConstants.USER.get_workspace_role()],
  128. [PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()], CompareConstants.AND),
  129. )
  130. @log(
  131. menu='tag', operate="Batch Delete knowledge tag",
  132. get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id'))
  133. )
  134. def put(self, request: Request, workspace_id: str, knowledge_id: str):
  135. return result.success(TagSerializers.BatchDelete(
  136. data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'tag_ids': request.data}
  137. ).batch_delete())