From dcc7d082aff66406c32464dde3e8c79563d7778a Mon Sep 17 00:00:00 2001 From: shaohuzhang1 Date: Thu, 16 May 2024 16:37:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AF=B9=E8=AF=9D=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E8=AE=B0=E5=BD=95=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serializers/chat_serializers.py | 18 +++++++++++++ apps/application/swagger_api/chat_api.py | 13 +++++++++- apps/application/urls.py | 2 ++ apps/application/views/chat_views.py | 25 ++++++++++++++++++- 4 files changed, 56 insertions(+), 2 deletions(-) diff --git a/apps/application/serializers/chat_serializers.py b/apps/application/serializers/chat_serializers.py index d8a3e648b..efdc7925a 100644 --- a/apps/application/serializers/chat_serializers.py +++ b/apps/application/serializers/chat_serializers.py @@ -56,6 +56,18 @@ class ChatSerializers(serializers.Serializer): QuerySet(Chat).filter(id=self.data.get('chat_id'), application_id=self.data.get('application_id')).delete() return True + class ClientChatHistory(serializers.Serializer): + application_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("应用id")) + client_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("客户端id")) + + def page(self, current_page: int, page_size: int, with_valid=True): + if with_valid: + self.is_valid(raise_exception=True) + queryset = QuerySet(Chat).filter(client_id=self.data.get('client_id'), + application_id=self.data.get('application_id')) + queryset = queryset.order_by('-create_time') + return page_search(current_page, page_size, queryset, lambda row: ChatSerializerModel(row).data) + class Query(serializers.Serializer): abstract = serializers.CharField(required=False, error_messages=ErrMessage.char("摘要")) history_day = serializers.IntegerField(required=True, error_messages=ErrMessage.integer("历史天数")) @@ -282,6 +294,12 @@ class ChatRecordSerializerModel(serializers.ModelSerializer): 'create_time', 'update_time'] +class ChatSerializerModel(serializers.ModelSerializer): + class Meta: + model = Chat + fields = ['id', 'application_id', 'abstract', 'client_id'] + + class ChatRecordSerializer(serializers.Serializer): class Operate(serializers.Serializer): chat_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("对话id")) diff --git a/apps/application/swagger_api/chat_api.py b/apps/application/swagger_api/chat_api.py index 29f60c3d0..9c56cd21e 100644 --- a/apps/application/swagger_api/chat_api.py +++ b/apps/application/swagger_api/chat_api.py @@ -12,6 +12,17 @@ from application.swagger_api.application_api import ApplicationApi from common.mixins.api_mixin import ApiMixin +class ChatClientHistoryApi(ApiMixin): + @staticmethod + def get_request_params_api(): + return [openapi.Parameter(name='application_id', + in_=openapi.IN_PATH, + type=openapi.TYPE_STRING, + required=True, + description='应用id') + ] + + class ChatApi(ApiMixin): @staticmethod def get_request_body_api(): @@ -80,7 +91,7 @@ class ChatApi(ApiMixin): 'problem_optimization'], properties={ 'id': openapi.Schema(type=openapi.TYPE_STRING, title="应用id", - description="应用id,修改的时候传,创建的时候不传"), + description="应用id,修改的时候传,创建的时候不传"), 'model_id': openapi.Schema(type=openapi.TYPE_STRING, title="模型id", description="模型id"), 'dataset_id_list': openapi.Schema(type=openapi.TYPE_ARRAY, items=openapi.Schema(type=openapi.TYPE_STRING), diff --git a/apps/application/urls.py b/apps/application/urls.py index 30866c81a..624b5b45b 100644 --- a/apps/application/urls.py +++ b/apps/application/urls.py @@ -30,6 +30,8 @@ urlpatterns = [ path('application//', views.Application.Page.as_view(), name='application_page'), path('application//chat/open', views.ChatView.Open.as_view()), path("application/chat/open", views.ChatView.OpenTemp.as_view()), + path("application//chat/client//", + views.ChatView.ClientChatHistoryPage.as_view()), path('application//chat/export', views.ChatView.Export.as_view(), name='export'), path('application//chat', views.ChatView.as_view(), name='chats'), path('application//chat//', views.ChatView.Page.as_view()), diff --git a/apps/application/views/chat_views.py b/apps/application/views/chat_views.py index 2d6ef10f1..9ff3ce555 100644 --- a/apps/application/views/chat_views.py +++ b/apps/application/views/chat_views.py @@ -13,7 +13,8 @@ from rest_framework.views import APIView from application.serializers.chat_message_serializers import ChatMessageSerializer from application.serializers.chat_serializers import ChatSerializers, ChatRecordSerializer -from application.swagger_api.chat_api import ChatApi, VoteApi, ChatRecordApi, ImproveApi, ChatRecordImproveApi +from application.swagger_api.chat_api import ChatApi, VoteApi, ChatRecordApi, ImproveApi, ChatRecordImproveApi, \ + ChatClientHistoryApi from common.auth import TokenAuth, has_permissions from common.constants.authentication_type import AuthenticationType from common.constants.permission_constants import Permission, Group, Operate, \ @@ -137,6 +138,28 @@ class ChatView(APIView): data={'application_id': application_id, 'user_id': request.user.id, 'chat_id': chat_id}).delete()) + class ClientChatHistoryPage(APIView): + authentication_classes = [TokenAuth] + + @action(methods=['GET'], detail=False) + @swagger_auto_schema(operation_summary="分页获取客户端对话列表", + operation_id="分页获取客户端对话列表", + manual_parameters=result.get_page_request_params( + ChatClientHistoryApi.get_request_params_api()), + responses=result.get_page_api_response(ChatApi.get_response_body_api()), + tags=["应用/对话日志"] + ) + @has_permissions( + ViewPermission([RoleConstants.APPLICATION_ACCESS_TOKEN], + [lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE, + dynamic_tag=keywords.get('application_id'))]) + ) + def get(self, request: Request, application_id: str, current_page: int, page_size: int): + return result.success(ChatSerializers.ClientChatHistory( + data={'client_id': request.auth.client_id, 'application_id': application_id}).page( + current_page=current_page, + page_size=page_size)) + class Page(APIView): authentication_classes = [TokenAuth]