Skip to content

Commit a6c7402

Browse files
committed
feat: implement pagination support for Problem API with new Page endpoint
1 parent 4995721 commit a6c7402

File tree

4 files changed

+78
-12
lines changed

4 files changed

+78
-12
lines changed

apps/knowledge/api/problem.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,42 @@ class BatchDeleteAPI(ProblemReadAPI):
4848
@staticmethod
4949
def get_request():
5050
return ProblemBatchDeleteSerializer
51+
52+
53+
class ProblemPageAPI(APIMixin):
54+
@staticmethod
55+
def get_parameters():
56+
return [
57+
OpenApiParameter(
58+
name="workspace_id",
59+
description="工作空间id",
60+
type=OpenApiTypes.STR,
61+
location='path',
62+
required=True,
63+
),
64+
OpenApiParameter(
65+
name="knowledge_id",
66+
description="知识库id",
67+
type=OpenApiTypes.STR,
68+
location='path',
69+
required=True,
70+
),
71+
OpenApiParameter(
72+
name="current_page",
73+
description="当前页码",
74+
type=OpenApiTypes.INT,
75+
location='path',
76+
required=True,
77+
),
78+
OpenApiParameter(
79+
name="page_size",
80+
description="每页条数",
81+
type=OpenApiTypes.INT,
82+
location='path',
83+
required=True,
84+
),
85+
]
86+
87+
@staticmethod
88+
def get_response():
89+
return DefaultResultSerializer

apps/knowledge/serializers/problem.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,18 @@ def is_exits(exits_problem_paragraph_mapping_list, new_paragraph_mapping):
5858
exits_problem_paragraph_mapping_list if
5959
str(exits_problem_paragraph_mapping.paragraph_id) == new_paragraph_mapping.paragraph_id
6060
and str(exits_problem_paragraph_mapping.problem_id) == new_paragraph_mapping.problem_id
61-
and str(exits_problem_paragraph_mapping.dataset_id) == new_paragraph_mapping.dataset_id]
61+
and str(exits_problem_paragraph_mapping.knowledge_id) == new_paragraph_mapping.knowledge_id]
6262
return len(filter_list) > 0
6363

6464

65-
def to_problem_paragraph_mapping(problem, document_id: str, paragraph_id: str, dataset_id: str):
66-
return ProblemParagraphMapping(id=uuid.uuid1(),
67-
document_id=document_id,
68-
paragraph_id=paragraph_id,
69-
dataset_id=dataset_id,
70-
problem_id=str(problem.id)), problem
65+
def to_problem_paragraph_mapping(problem, document_id: str, paragraph_id: str, knowledge_id: str):
66+
return ProblemParagraphMapping(
67+
id=uuid.uuid7(),
68+
document_id=document_id,
69+
paragraph_id=paragraph_id,
70+
knowledge_id=knowledge_id,
71+
problem_id=str(problem.id)
72+
), problem
7173

7274

7375
class ProblemSerializers(serializers.Serializer):
@@ -117,9 +119,9 @@ def association(self, instance: Dict, with_valid=True):
117119
) if not is_exits(exits_problem_paragraph_mapping, problem_paragraph_mapping)
118120
]
119121

120-
QuerySet(ProblemParagraphMapping).bulk_create([
121-
problem_paragraph_mapping for problem_paragraph_mapping, problem in problem_paragraph_mapping_list
122-
])
122+
QuerySet(ProblemParagraphMapping).bulk_create(
123+
[problem_paragraph_mapping for problem_paragraph_mapping, problem in problem_paragraph_mapping_list]
124+
)
123125

124126
data_list = [
125127
{

apps/knowledge/urls.py

Lines changed: 2 additions & 1 deletion
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>/document/<int:current_page>/<int:page_sige>', views.DocumentView.Page.as_view()),
36+
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/problem/<int:current_page>/<int:page_size>', views.ProblemView.Page.as_view()),
37+
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/document/<int:current_page>/<int:page_size>', views.DocumentView.Page.as_view()),
3738
path('workspace/<str:workspace_id>/knowledge/<int:current_page>/<int:page_size>', views.KnowledgeView.Page.as_view()),
3839
]

apps/knowledge/views/problem.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
from common.constants.permission_constants import PermissionConstants
99
from common.result import result
1010
from common.utils.common import query_params_to_single_dict
11-
from knowledge.api.problem import ProblemReadAPI, ProblemBatchCreateAPI, BatchAssociationAPI, BatchDeleteAPI
11+
from knowledge.api.problem import ProblemReadAPI, ProblemBatchCreateAPI, BatchAssociationAPI, BatchDeleteAPI, \
12+
ProblemPageAPI
1213
from knowledge.serializers.problem import ProblemSerializers
1314

1415

@@ -88,3 +89,26 @@ def put(self, request: Request, workspace_id: str, knowledge_id: str):
8889
return result.success(ProblemSerializers.BatchOperate(
8990
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
9091
).delete(request.data))
92+
93+
class Page(APIView):
94+
authentication_classes = [TokenAuth]
95+
96+
@extend_schema(
97+
summary=_('Get the list of questions by page'),
98+
description=_('Get the list of questions by page'),
99+
operation_id=_('Get the list of questions by page'),
100+
parameters=ProblemPageAPI.get_parameters(),
101+
responses=ProblemPageAPI.get_response(),
102+
tags=[_('Knowledge Base/Documentation/Paragraph/Question')]
103+
)
104+
@has_permissions(PermissionConstants.DOCUMENT_EDIT.get_workspace_permission())
105+
def get(self, request: Request, workspace_id: str, knowledge_id: str, current_page, page_size):
106+
d = ProblemSerializers.Query(
107+
data={
108+
**query_params_to_single_dict(request.query_params),
109+
'knowledge_id': knowledge_id,
110+
'workspace_id': workspace_id
111+
}
112+
)
113+
d.is_valid(raise_exception=True)
114+
return result.success(d.page(current_page, page_size))

0 commit comments

Comments
 (0)