Feat: add total in List dataset API (#10448)

### What problem does this PR solve?

Feat: add total in List dataset API,  solved #10360 

### Type of change

- [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
Billy Bao
2025-10-10 11:20:55 +08:00
committed by GitHub
parent 6ab4c1a6e9
commit 9b06734ced
4 changed files with 28 additions and 14 deletions

View File

@ -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")

View File

@ -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()

View File

@ -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!",

View File

@ -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
}
}
```