Skip to content

Commit 6cdd5b4

Browse files
committed
feat: implement Problem API for delete and modify operations with new Operate endpoint
1 parent a6c7402 commit 6cdd5b4

File tree

4 files changed

+86
-2
lines changed

4 files changed

+86
-2
lines changed

apps/knowledge/api/problem.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from common.mixins.api_mixin import APIMixin
55
from common.result import DefaultResultSerializer
66
from knowledge.serializers.problem import ProblemBatchSerializer, \
7-
ProblemBatchDeleteSerializer, BatchAssociation
7+
ProblemBatchDeleteSerializer, BatchAssociation, ProblemEditSerializer
88

99

1010
class ProblemReadAPI(APIMixin):
@@ -87,3 +87,41 @@ def get_parameters():
8787
@staticmethod
8888
def get_response():
8989
return DefaultResultSerializer
90+
91+
92+
class ProblemDeleteAPI(APIMixin):
93+
@staticmethod
94+
def get_parameters():
95+
return [
96+
OpenApiParameter(
97+
name="workspace_id",
98+
description="工作空间id",
99+
type=OpenApiTypes.STR,
100+
location='path',
101+
required=True,
102+
),
103+
OpenApiParameter(
104+
name="knowledge_id",
105+
description="知识库id",
106+
type=OpenApiTypes.STR,
107+
location='path',
108+
required=True,
109+
),
110+
OpenApiParameter(
111+
name="problem_id",
112+
description="问题id",
113+
type=OpenApiTypes.STR,
114+
location='path',
115+
required=True,
116+
)
117+
]
118+
119+
@staticmethod
120+
def get_response():
121+
return DefaultResultSerializer
122+
123+
124+
class ProblemEditAPI(ProblemReadAPI):
125+
@staticmethod
126+
def get_request():
127+
return ProblemEditSerializer

apps/knowledge/serializers/problem.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ProblemInstanceSerializer(serializers.Serializer):
2626
id = serializers.CharField(required=False, label=_('problem id'))
2727
content = serializers.CharField(required=True, max_length=256, label=_('content'))
2828

29+
class ProblemEditSerializer(serializers.Serializer):
30+
content = serializers.CharField(required=True, max_length=256, label=_('content'))
31+
2932

3033
class ProblemMappingSerializer(serializers.Serializer):
3134
paragraph_id = serializers.UUIDField(required=True, label=_('paragraph id'))

apps/knowledge/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/problem', views.ProblemView.as_view()),
3434
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/problem/batch_delete', views.ProblemView.BatchDelete.as_view()),
3535
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/problem/batch_association', views.ProblemView.BatchAssociation.as_view()),
36+
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/problem/<str:problem_id>', views.ProblemView.Operate.as_view()),
3637
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/problem/<int:current_page>/<int:page_size>', views.ProblemView.Page.as_view()),
3738
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/document/<int:current_page>/<int:page_size>', views.DocumentView.Page.as_view()),
3839
path('workspace/<str:workspace_id>/knowledge/<int:current_page>/<int:page_size>', views.KnowledgeView.Page.as_view()),

apps/knowledge/views/problem.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from common.result import result
1010
from common.utils.common import query_params_to_single_dict
1111
from knowledge.api.problem import ProblemReadAPI, ProblemBatchCreateAPI, BatchAssociationAPI, BatchDeleteAPI, \
12-
ProblemPageAPI
12+
ProblemPageAPI, ProblemDeleteAPI, ProblemEditAPI
1313
from knowledge.serializers.problem import ProblemSerializers
1414

1515

@@ -90,6 +90,48 @@ def put(self, request: Request, workspace_id: str, knowledge_id: str):
9090
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
9191
).delete(request.data))
9292

93+
class Operate(APIView):
94+
authentication_classes = [TokenAuth]
95+
96+
@extend_schema(
97+
methods=['DELETE'],
98+
summary=_('Delete question'),
99+
description=_('Delete question'),
100+
operation_id=_('Delete question'),
101+
parameters=ProblemDeleteAPI.get_parameters(),
102+
responses=ProblemDeleteAPI.get_response(),
103+
tags=[_('Knowledge Base/Documentation/Paragraph/Question')]
104+
)
105+
def delete(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str):
106+
return result.success(ProblemSerializers.Operate(
107+
data={
108+
**query_params_to_single_dict(request.query_params),
109+
'workspace_id': workspace_id,
110+
'knowledge_id': knowledge_id,
111+
'problem_id': problem_id
112+
}
113+
).delete())
114+
115+
@extend_schema(
116+
methods=['PUT'],
117+
summary=_('Modify question'),
118+
description=_('Modify question'),
119+
operation_id=_('Modify question'),
120+
parameters=ProblemEditAPI.get_parameters(),
121+
request=ProblemEditAPI.get_request(),
122+
responses=ProblemEditAPI.get_response(),
123+
tags=[_('Knowledge Base/Documentation/Paragraph/Question')]
124+
)
125+
def put(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str):
126+
return result.success(ProblemSerializers.Operate(
127+
data={
128+
**query_params_to_single_dict(request.query_params),
129+
'workspace_id': workspace_id,
130+
'knowledge_id': knowledge_id,
131+
'problem_id': problem_id
132+
}
133+
).edit(request.data))
134+
93135
class Page(APIView):
94136
authentication_classes = [TokenAuth]
95137

0 commit comments

Comments
 (0)