diff --git a/apps/knowledge/api/problem.py b/apps/knowledge/api/problem.py index 16793e09c..b1a7a8321 100644 --- a/apps/knowledge/api/problem.py +++ b/apps/knowledge/api/problem.py @@ -4,7 +4,7 @@ from drf_spectacular.utils import OpenApiParameter from common.mixins.api_mixin import APIMixin from common.result import DefaultResultSerializer from knowledge.serializers.problem import ProblemBatchSerializer, \ - ProblemBatchDeleteSerializer, BatchAssociation + ProblemBatchDeleteSerializer, BatchAssociation, ProblemEditSerializer class ProblemReadAPI(APIMixin): @@ -87,3 +87,41 @@ class ProblemPageAPI(APIMixin): @staticmethod def get_response(): return DefaultResultSerializer + + +class ProblemDeleteAPI(APIMixin): + @staticmethod + def get_parameters(): + return [ + OpenApiParameter( + name="workspace_id", + description="工作空间id", + type=OpenApiTypes.STR, + location='path', + required=True, + ), + OpenApiParameter( + name="knowledge_id", + description="知识库id", + type=OpenApiTypes.STR, + location='path', + required=True, + ), + OpenApiParameter( + name="problem_id", + description="问题id", + type=OpenApiTypes.STR, + location='path', + required=True, + ) + ] + + @staticmethod + def get_response(): + return DefaultResultSerializer + + +class ProblemEditAPI(ProblemReadAPI): + @staticmethod + def get_request(): + return ProblemEditSerializer diff --git a/apps/knowledge/serializers/problem.py b/apps/knowledge/serializers/problem.py index 57a9a4c07..530716ab4 100644 --- a/apps/knowledge/serializers/problem.py +++ b/apps/knowledge/serializers/problem.py @@ -26,6 +26,9 @@ class ProblemInstanceSerializer(serializers.Serializer): id = serializers.CharField(required=False, label=_('problem id')) content = serializers.CharField(required=True, max_length=256, label=_('content')) +class ProblemEditSerializer(serializers.Serializer): + content = serializers.CharField(required=True, max_length=256, label=_('content')) + class ProblemMappingSerializer(serializers.Serializer): paragraph_id = serializers.UUIDField(required=True, label=_('paragraph id')) diff --git a/apps/knowledge/urls.py b/apps/knowledge/urls.py index a8a7d97c3..2dad0cb35 100644 --- a/apps/knowledge/urls.py +++ b/apps/knowledge/urls.py @@ -33,6 +33,7 @@ urlpatterns = [ path('workspace//knowledge//problem', views.ProblemView.as_view()), path('workspace//knowledge//problem/batch_delete', views.ProblemView.BatchDelete.as_view()), path('workspace//knowledge//problem/batch_association', views.ProblemView.BatchAssociation.as_view()), + path('workspace//knowledge//problem/', views.ProblemView.Operate.as_view()), path('workspace//knowledge//problem//', views.ProblemView.Page.as_view()), path('workspace//knowledge//document//', views.DocumentView.Page.as_view()), path('workspace//knowledge//', views.KnowledgeView.Page.as_view()), diff --git a/apps/knowledge/views/problem.py b/apps/knowledge/views/problem.py index 51ac58232..775edb993 100644 --- a/apps/knowledge/views/problem.py +++ b/apps/knowledge/views/problem.py @@ -9,7 +9,7 @@ from common.constants.permission_constants import PermissionConstants from common.result import result from common.utils.common import query_params_to_single_dict from knowledge.api.problem import ProblemReadAPI, ProblemBatchCreateAPI, BatchAssociationAPI, BatchDeleteAPI, \ - ProblemPageAPI + ProblemPageAPI, ProblemDeleteAPI, ProblemEditAPI from knowledge.serializers.problem import ProblemSerializers @@ -90,6 +90,48 @@ class ProblemView(APIView): data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} ).delete(request.data)) + class Operate(APIView): + authentication_classes = [TokenAuth] + + @extend_schema( + methods=['DELETE'], + summary=_('Delete question'), + description=_('Delete question'), + operation_id=_('Delete question'), + parameters=ProblemDeleteAPI.get_parameters(), + responses=ProblemDeleteAPI.get_response(), + tags=[_('Knowledge Base/Documentation/Paragraph/Question')] + ) + def delete(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str): + return result.success(ProblemSerializers.Operate( + data={ + **query_params_to_single_dict(request.query_params), + 'workspace_id': workspace_id, + 'knowledge_id': knowledge_id, + 'problem_id': problem_id + } + ).delete()) + + @extend_schema( + methods=['PUT'], + summary=_('Modify question'), + description=_('Modify question'), + operation_id=_('Modify question'), + parameters=ProblemEditAPI.get_parameters(), + request=ProblemEditAPI.get_request(), + responses=ProblemEditAPI.get_response(), + tags=[_('Knowledge Base/Documentation/Paragraph/Question')] + ) + def put(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str): + return result.success(ProblemSerializers.Operate( + data={ + **query_params_to_single_dict(request.query_params), + 'workspace_id': workspace_id, + 'knowledge_id': knowledge_id, + 'problem_id': problem_id + } + ).edit(request.data)) + class Page(APIView): authentication_classes = [TokenAuth]