chat_record.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎虎
  5. @file: chat_record.py
  6. @date:2025/6/23 10:42
  7. @desc:
  8. """
  9. from django.utils.translation import gettext_lazy as _
  10. from drf_spectacular.utils import extend_schema
  11. from rest_framework.request import Request
  12. from rest_framework.views import APIView
  13. from application.serializers.application_chat_record import ChatRecordOperateSerializer
  14. from chat.api.chat_api import HistoricalConversationAPI, PageHistoricalConversationAPI, \
  15. PageHistoricalConversationRecordAPI, HistoricalConversationRecordAPI, HistoricalConversationOperateAPI
  16. from chat.api.vote_api import VoteAPI
  17. from chat.serializers.chat_record import VoteSerializer, HistoricalConversationSerializer, \
  18. HistoricalConversationRecordSerializer, HistoricalConversationOperateSerializer
  19. from common import result
  20. from common.auth import ChatTokenAuth
  21. class VoteView(APIView):
  22. authentication_classes = [ChatTokenAuth]
  23. @extend_schema(
  24. methods=['PUT'],
  25. description=_("Like, Dislike"),
  26. summary=_("Like, Dislike"),
  27. operation_id=_("Like, Dislike"), # type: ignore
  28. parameters=VoteAPI.get_parameters(),
  29. request=VoteAPI.get_request(),
  30. responses=VoteAPI.get_response(),
  31. tags=[_('Chat')] # type: ignore
  32. )
  33. def put(self, request: Request, chat_id: str, chat_record_id: str):
  34. return result.success(VoteSerializer(
  35. data={'chat_id': chat_id,
  36. 'chat_record_id': chat_record_id
  37. }).vote(request.data))
  38. class HistoricalConversationView(APIView):
  39. authentication_classes = [ChatTokenAuth]
  40. @extend_schema(
  41. methods=['GET'],
  42. description=_("Get historical conversation"),
  43. summary=_("Get historical conversation"),
  44. operation_id=_("Get historical conversation"), # type: ignore
  45. parameters=HistoricalConversationAPI.get_parameters(),
  46. responses=HistoricalConversationAPI.get_response(),
  47. tags=[_('Chat')] # type: ignore
  48. )
  49. def get(self, request: Request):
  50. return result.success(HistoricalConversationSerializer(
  51. data={
  52. 'application_id': request.auth.application_id,
  53. 'chat_user_id': request.auth.chat_user_id,
  54. }).list())
  55. class Operate(APIView):
  56. authentication_classes = [ChatTokenAuth]
  57. @extend_schema(
  58. methods=['PUT'],
  59. description=_("Modify conversation about"),
  60. summary=_("Modify conversation about"),
  61. operation_id=_("Modify conversation about"), # type: ignore
  62. parameters=HistoricalConversationOperateAPI.get_parameters(),
  63. request=HistoricalConversationOperateAPI.get_request(),
  64. responses=HistoricalConversationOperateAPI.get_response(),
  65. tags=[_('Chat')] # type: ignore
  66. )
  67. def put(self, request: Request, chat_id: str):
  68. return result.success(HistoricalConversationOperateSerializer(
  69. data={
  70. 'application_id': request.auth.application_id,
  71. 'chat_user_id': request.auth.chat_user_id,
  72. 'chat_id': chat_id,
  73. }).edit_abstract(request.data)
  74. )
  75. @extend_schema(
  76. methods=['DELETE'],
  77. description=_("Delete history conversation"),
  78. summary=_("Delete history conversation"),
  79. operation_id=_("Delete history conversation"), # type: ignore
  80. parameters=HistoricalConversationOperateAPI.get_parameters(),
  81. responses=HistoricalConversationOperateAPI.get_response(),
  82. tags=[_('Chat')] # type: ignore
  83. )
  84. def delete(self, request: Request, chat_id: str):
  85. return result.success(HistoricalConversationOperateSerializer(
  86. data={
  87. 'application_id': request.auth.application_id,
  88. 'chat_user_id': request.auth.chat_user_id,
  89. 'chat_id': chat_id,
  90. }).logic_delete())
  91. class BatchDelete(APIView):
  92. authentication_classes = [ChatTokenAuth]
  93. @extend_schema(
  94. methods=['DELETE'],
  95. description=_("Batch delete history conversation"),
  96. summary=_("Batch delete history conversation"),
  97. operation_id=_("Batch delete history conversation"), # type: ignore
  98. parameters=HistoricalConversationOperateAPI.get_parameters(),
  99. responses=HistoricalConversationOperateAPI.get_response(),
  100. tags=[_('Chat')] # type: ignore
  101. )
  102. def delete(self, request: Request):
  103. return result.success(HistoricalConversationOperateSerializer.Clear(data={
  104. 'application_id': request.auth.application_id,
  105. 'chat_user_id': request.auth.chat_user_id,
  106. }).batch_logic_delete())
  107. class PageView(APIView):
  108. authentication_classes = [ChatTokenAuth]
  109. @extend_schema(
  110. methods=['GET'],
  111. description=_("Get historical conversation by page"),
  112. summary=_("Get historical conversation by page"),
  113. operation_id=_("Get historical conversation by page"), # type: ignore
  114. parameters=PageHistoricalConversationAPI.get_parameters(),
  115. responses=PageHistoricalConversationAPI.get_response(),
  116. tags=[_('Chat')] # type: ignore
  117. )
  118. def get(self, request: Request, current_page: int, page_size: int):
  119. return result.success(HistoricalConversationSerializer(
  120. data={
  121. 'application_id': request.auth.application_id,
  122. 'chat_user_id': request.auth.chat_user_id,
  123. }).page(current_page, page_size))
  124. class HistoricalConversationRecordView(APIView):
  125. authentication_classes = [ChatTokenAuth]
  126. @extend_schema(
  127. methods=['GET'],
  128. description=_("Get historical conversation records"),
  129. summary=_("Get historical conversation records"),
  130. operation_id=_("Get historical conversation records"), # type: ignore
  131. parameters=HistoricalConversationRecordAPI.get_parameters(),
  132. responses=HistoricalConversationRecordAPI.get_response(),
  133. tags=[_('Chat')] # type: ignore
  134. )
  135. def get(self, request: Request, chat_id: str):
  136. return result.success(HistoricalConversationRecordSerializer(
  137. data={
  138. 'chat_id': chat_id,
  139. 'application_id': request.auth.application_id,
  140. 'chat_user_id': request.auth.chat_user_id,
  141. }).list())
  142. class PageView(APIView):
  143. authentication_classes = [ChatTokenAuth]
  144. @extend_schema(
  145. methods=['GET'],
  146. description=_("Get historical conversation records by page "),
  147. summary=_("Get historical conversation records by page"),
  148. operation_id=_("Get historical conversation records by page"), # type: ignore
  149. parameters=PageHistoricalConversationRecordAPI.get_parameters(),
  150. responses=PageHistoricalConversationRecordAPI.get_response(),
  151. tags=[_('Chat')] # type: ignore
  152. )
  153. def get(self, request: Request, chat_id: str, current_page: int, page_size: int):
  154. return result.success(HistoricalConversationRecordSerializer(
  155. data={
  156. 'chat_id': chat_id,
  157. 'application_id': request.auth.application_id,
  158. 'chat_user_id': request.auth.chat_user_id,
  159. }).page(current_page, page_size))
  160. class ChatRecordView(APIView):
  161. authentication_classes = [ChatTokenAuth]
  162. @extend_schema(
  163. methods=['GET'],
  164. description=_("Get conversation details"),
  165. summary=_("Get conversation details"),
  166. operation_id=_("Get conversation details"), # type: ignore
  167. parameters=PageHistoricalConversationRecordAPI.get_parameters(),
  168. responses=PageHistoricalConversationRecordAPI.get_response(),
  169. tags=[_('Chat')] # type: ignore
  170. )
  171. def get(self, request: Request, chat_id: str, chat_record_id: str):
  172. return result.success(ChatRecordOperateSerializer(
  173. data={
  174. 'chat_id': chat_id,
  175. 'chat_record_id': chat_record_id,
  176. 'application_id': request.auth.application_id,
  177. 'chat_user_id': request.auth.chat_user_id,
  178. }).one(False))