diff --git a/apps/application/serializers/chat_serializers.py b/apps/application/serializers/chat_serializers.py index a6245cc20..7fd260a1c 100644 --- a/apps/application/serializers/chat_serializers.py +++ b/apps/application/serializers/chat_serializers.py @@ -36,6 +36,16 @@ chat_cache = cache class ChatSerializers(serializers.Serializer): + class Operate(serializers.Serializer): + chat_id = serializers.UUIDField(required=True) + application_id = serializers.UUIDField(required=True) + + def delete(self, with_valid=True): + if with_valid: + self.is_valid(raise_exception=True) + QuerySet(Chat).filter(id=self.data.get('chat_id'), application_id=self.data.get('application_id')).delete() + return True + class Query(serializers.Serializer): abstract = serializers.CharField(required=False) history_day = serializers.IntegerField(required=True) @@ -48,7 +58,10 @@ class ChatSerializers(serializers.Serializer): def get_query_set(self): end_time = self.get_end_time() - return QuerySet(Chat).filter(application_id=self.data.get("application_id"), create_time__gte=end_time) + query_dict = {'application_id': self.data.get("application_id"), 'create_time__gte': end_time} + if 'abstract' in self.data and self.data.get('abstract') is not None: + query_dict['abstract'] = self.data.get('abstract') + return QuerySet(Chat).filter(**query_dict) def list(self, with_valid=True): if with_valid: diff --git a/apps/application/swagger_api/chat_api.py b/apps/application/swagger_api/chat_api.py index 89fab5310..1ac15e6f2 100644 --- a/apps/application/swagger_api/chat_api.py +++ b/apps/application/swagger_api/chat_api.py @@ -61,7 +61,9 @@ class ChatApi(ApiMixin): in_=openapi.IN_QUERY, type=openapi.TYPE_NUMBER, required=True, - description='历史天数') + description='历史天数'), + openapi.Parameter(name='abstract', in_=openapi.IN_QUERY, type=openapi.TYPE_STRING, required=False, + description="摘要") ] diff --git a/apps/application/urls.py b/apps/application/urls.py index 2533720be..72293af32 100644 --- a/apps/application/urls.py +++ b/apps/application/urls.py @@ -20,6 +20,7 @@ urlpatterns = [ path("application/chat/open", views.ChatView.OpenTemp.as_view()), path('application//chat', views.ChatView.as_view(), name='chats'), path('application//chat//', views.ChatView.Page.as_view()), + path('application//chat/', views.ChatView.Operate.as_view()), path('application//chat//chat_record/', views.ChatView.ChatRecord.as_view()), path('application//chat//chat_record//', views.ChatView.ChatRecord.Page.as_view()), diff --git a/apps/application/views/chat_views.py b/apps/application/views/chat_views.py index cc17384b3..5484c71dc 100644 --- a/apps/application/views/chat_views.py +++ b/apps/application/views/chat_views.py @@ -90,6 +90,26 @@ class ChatView(APIView): data={**query_params_to_single_dict(request.query_params), 'application_id': application_id, 'user_id': request.user.id}).list()) + class Operate(APIView): + authentication_classes = [TokenAuth] + + @action(methods=['DELETE'], detail=False) + @swagger_auto_schema(operation_summary="删除对话", + operation_id="删除对话", + tags=["应用/对话日志"]) + @has_permissions(ViewPermission( + [RoleConstants.ADMIN, RoleConstants.USER], + [lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE, + dynamic_tag=keywords.get('application_id'))], + compare=CompareConstants.AND), lambda r, k: Permission(group=Group.APPLICATION, operate=Operate.DELETE, + dynamic_tag=k.get('application_id')), + compare=CompareConstants.AND) + def delete(self, request: Request, application_id: str, chat_id: str): + return result.success( + ChatSerializers.Operate( + data={'application_id': application_id, 'user_id': request.user.id, + 'chat_id': chat_id}).delete()) + class Page(APIView): authentication_classes = [TokenAuth]