Skip to content

Commit 6f5645e

Browse files
committed
feat: add DocumentTreeReadAPI for document pagination and file size limit to knowledge model
1 parent c3b979d commit 6f5645e

File tree

5 files changed

+113
-7
lines changed

5 files changed

+113
-7
lines changed

apps/knowledge/api/document.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,3 +266,52 @@ def get_parameters():
266266
@staticmethod
267267
def get_request():
268268
return BatchEditHitHandlingSerializer
269+
270+
271+
class DocumentTreeReadAPI(APIMixin):
272+
@staticmethod
273+
def get_parameters():
274+
return [
275+
OpenApiParameter(
276+
name="workspace_id",
277+
description="工作空间id",
278+
type=OpenApiTypes.STR,
279+
location='path',
280+
required=True,
281+
),
282+
OpenApiParameter(
283+
name="knowledge_id",
284+
description="知识库id",
285+
type=OpenApiTypes.STR,
286+
location='path',
287+
required=True,
288+
),
289+
OpenApiParameter(
290+
name="folder_id",
291+
description="文件夹id",
292+
type=OpenApiTypes.STR,
293+
location='query',
294+
required=True,
295+
),
296+
OpenApiParameter(
297+
name="user_id",
298+
description="用户id",
299+
type=OpenApiTypes.STR,
300+
location='query',
301+
required=False,
302+
),
303+
OpenApiParameter(
304+
name="name",
305+
description="名称",
306+
type=OpenApiTypes.STR,
307+
location='query',
308+
required=False,
309+
),
310+
OpenApiParameter(
311+
name="desc",
312+
description="描述",
313+
type=OpenApiTypes.STR,
314+
location='query',
315+
required=False,
316+
),
317+
]
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Generated by Django 5.2 on 2025-05-06 09:05
2+
3+
import knowledge.models.knowledge
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('knowledge', '0003_alter_document_status_alter_paragraph_status_and_more'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='knowledge',
16+
name='file_size_limit',
17+
field=models.IntegerField(default=100, verbose_name='文件大小限制'),
18+
),
19+
migrations.AlterField(
20+
model_name='document',
21+
name='status',
22+
field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'),
23+
),
24+
migrations.AlterField(
25+
model_name='paragraph',
26+
name='status',
27+
field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'),
28+
),
29+
]

apps/knowledge/models/knowledge.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ class Knowledge(AppModelMixin):
127127
folder = models.ForeignKey(KnowledgeFolder, on_delete=models.DO_NOTHING, verbose_name="文件夹id", default='root')
128128
embedding_model = models.ForeignKey(Model, on_delete=models.DO_NOTHING, verbose_name="向量模型",
129129
default=default_model)
130+
file_size_limit = models.IntegerField(verbose_name="文件大小限制", default=100)
130131
meta = models.JSONField(verbose_name="元数据", default=dict)
131132

132133
class Meta:
@@ -197,6 +198,7 @@ class ProblemParagraphMapping(AppModelMixin):
197198
class Meta:
198199
db_table = "problem_paragraph_mapping"
199200

201+
200202
class ApplicationKnowledgeMapping(AppModelMixin):
201203
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
202204
# application = models.ForeignKey(Application, on_delete=models.CASCADE)
@@ -206,7 +208,6 @@ class Meta:
206208
db_table = "application_knowledge_mapping"
207209

208210

209-
210211
class SourceType(models.IntegerChoices):
211212
"""订单类型"""
212213
PROBLEM = 0, '问题'

apps/knowledge/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@
2020
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/document/<str:document_id>/refresh', views.DocumentView.Refresh.as_view()),
2121
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/document/<str:document_id>/cancel_task', views.DocumentView.CancelTask.as_view()),
2222
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/document/<str:document_id>/cancel_task/batch', views.DocumentView.BatchCancelTask.as_view()),
23+
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/document/<int:current_page>/<int:page_sige>', views.DocumentView.Page.as_view()),
2324
path('workspace/<str:workspace_id>/knowledge/<int:current_page>/<int:page_size>', views.KnowledgeView.Page.as_view()),
2425
]

apps/knowledge/views/document.py

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
from common.result import result
1111
from knowledge.api.document import DocumentSplitAPI, DocumentBatchAPI, DocumentBatchCreateAPI, DocumentCreateAPI, \
1212
DocumentReadAPI, DocumentEditAPI, DocumentDeleteAPI, TableDocumentCreateAPI, QaDocumentCreateAPI, \
13-
WebDocumentCreateAPI, CancelTaskAPI, BatchCancelTaskAPI, SyncWebAPI, RefreshAPI, BatchEditHitHandlingAPI
14-
from knowledge.api.knowledge import KnowledgeTreeReadAPI
13+
WebDocumentCreateAPI, CancelTaskAPI, BatchCancelTaskAPI, SyncWebAPI, RefreshAPI, BatchEditHitHandlingAPI, \
14+
DocumentTreeReadAPI
1515
from knowledge.serializers.document import DocumentSerializers
1616

1717

@@ -40,8 +40,8 @@ def post(self, request: Request, workspace_id: str, knowledge_id: str):
4040
description=_('Get document'),
4141
summary=_('Get document'),
4242
operation_id=_('Get document'),
43-
parameters=KnowledgeTreeReadAPI.get_parameters(),
44-
responses=KnowledgeTreeReadAPI.get_response(),
43+
parameters=DocumentTreeReadAPI.get_parameters(),
44+
responses=DocumentTreeReadAPI.get_response(),
4545
tags=[_('Knowledge Base/Documentation')]
4646
)
4747
@has_permissions(PermissionConstants.DOCUMENT_READ.get_workspace_permission())
@@ -163,16 +163,17 @@ class SyncWeb(APIView):
163163
authentication_classes = [TokenAuth]
164164

165165
@extend_schema(
166-
methods=['PUT'],
166+
methods=['GET'],
167167
description=_('Synchronize web site types'),
168168
summary=_('Synchronize web site types'),
169169
operation_id=_('Synchronize web site types'),
170170
parameters=SyncWebAPI.get_parameters(),
171+
request=SyncWebAPI.get_request(),
171172
responses=SyncWebAPI.get_response(),
172173
tags=[_('Knowledge Base/Documentation')]
173174
)
174175
@has_permissions(PermissionConstants.DOCUMENT_EDIT.get_workspace_permission())
175-
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
176+
def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
176177
return result.success(DocumentSerializers.Sync(
177178
data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
178179
).sync())
@@ -291,6 +292,31 @@ def delete(self, request: Request, workspace_id: str, knowledge_id: str):
291292
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
292293
).batch_delete(request.data))
293294

295+
class Page(APIView):
296+
authentication_classes = [TokenAuth]
297+
298+
@extend_schema(
299+
methods=['GET'],
300+
description=_('Get document by pagination'),
301+
summary=_('Get document by pagination'),
302+
operation_id=_('Get document by pagination'),
303+
parameters=DocumentTreeReadAPI.get_parameters(),
304+
responses=DocumentTreeReadAPI.get_response(),
305+
tags=[_('Knowledge Base/Documentation')]
306+
)
307+
@has_permissions(PermissionConstants.DOCUMENT_READ.get_workspace_permission())
308+
def get(self, request: Request, workspace_id: str, knowledge_id: str, current_page: int, page_size: int):
309+
return result.success(DocumentSerializers.Query(
310+
data={
311+
'workspace_id': workspace_id,
312+
'knowledge_id': knowledge_id,
313+
'folder_id': request.query_params.get('folder_id'),
314+
'name': request.query_params.get('name'),
315+
'desc': request.query_params.get("desc"),
316+
'user_id': request.query_params.get('user_id')
317+
}
318+
).page(current_page, page_size))
319+
294320

295321
class WebDocumentView(APIView):
296322
authentication_classes = [TokenAuth]

0 commit comments

Comments
 (0)