diff --git a/api/apps/sdk/dataset.py b/api/apps/sdk/dataset.py index ff446055c..5a43b6835 100644 --- a/api/apps/sdk/dataset.py +++ b/api/apps/sdk/dataset.py @@ -461,7 +461,7 @@ def list_datasets(tenant_id): return get_error_permission_result(message=f"User '{tenant_id}' lacks permission for dataset '{name}'") tenants = TenantService.get_joined_tenants_by_user_id(tenant_id) - kbs = KnowledgebaseService.get_list( + kbs, total = KnowledgebaseService.get_list( [m["tenant_id"] for m in tenants], tenant_id, args["page"], @@ -475,7 +475,7 @@ def list_datasets(tenant_id): response_data_list = [] for kb in kbs: response_data_list.append(remap_dictionary_keys(kb)) - return get_result(data=response_data_list) + return get_result(data=response_data_list, total=total) except OperationalError as e: logging.exception(e) return get_error_data_result(message="Database operation failed") diff --git a/api/db/services/knowledgebase_service.py b/api/db/services/knowledgebase_service.py index 492c24510..42d8389fa 100644 --- a/api/db/services/knowledgebase_service.py +++ b/api/db/services/knowledgebase_service.py @@ -379,6 +379,7 @@ class KnowledgebaseService(CommonService): # name: Optional name filter # Returns: # List of knowledge bases + # Total count of knowledge bases kbs = cls.model.select() if id: kbs = kbs.where(cls.model.id == id) @@ -390,6 +391,7 @@ class KnowledgebaseService(CommonService): cls.model.tenant_id == user_id)) & (cls.model.status == StatusEnum.VALID.value) ) + if desc: kbs = kbs.order_by(cls.model.getter_by(orderby).desc()) else: @@ -397,7 +399,7 @@ class KnowledgebaseService(CommonService): kbs = kbs.paginate(page_number, items_per_page) - return list(kbs.dicts()) + return list(kbs.dicts()), kbs.count() @classmethod @DB.connection_context() diff --git a/api/utils/api_utils.py b/api/utils/api_utils.py index c9e7ae455..8730dff4d 100644 --- a/api/utils/api_utils.py +++ b/api/utils/api_utils.py @@ -362,16 +362,27 @@ def token_required(func): return decorated_function -def get_result(code: settings.RetCode = settings.RetCode.SUCCESS, message="", data=None): - if code == 0: - if data is not None: - response = {"code": code, "data": data} - else: - response = {"code": code} - else: - response = {"code": code, "message": message} - return jsonify(response) +def get_result(code=settings.RetCode.SUCCESS, message="", data=None, total=None): + """ + Standard API response format: + { + "code": 0, + "data": [...], # List or object, backward compatible + "total": 47, # Optional field for pagination + "message": "..." # Error or status message + } + """ + response = {"code": code} + if code == settings.RetCode.SUCCESS: + if data is not None: + response["data"] = data + if total is not None: + response["total_datasets"] = total + else: + response["message"] = message or "Error" + + return jsonify(response) def get_error_data_result( message="Sorry! Data missing!", diff --git a/docs/references/http_api_reference.md b/docs/references/http_api_reference.md index 062c942d7..12d20b296 100644 --- a/docs/references/http_api_reference.md +++ b/docs/references/http_api_reference.md @@ -830,7 +830,8 @@ Success: "update_time": 1728533243536, "vector_similarity_weight": 0.3 } - ] + ], + "total": 1 } ``` @@ -1280,7 +1281,7 @@ Success: "update_time": 1728897061948 } ], - "total": 1 + "total_datasets": 1 } } ```