diff --git a/api/apps/sdk/dataset.py b/api/apps/sdk/dataset.py index f39c6ca90..afa2988c6 100644 --- a/api/apps/sdk/dataset.py +++ b/api/apps/sdk/dataset.py @@ -228,6 +228,8 @@ def delete(tenant_id): schema: type: object """ + errors = [] + success_count = 0 req = request.json if not req: ids = None @@ -243,12 +245,12 @@ def delete(tenant_id): for id in id_list: kbs = KnowledgebaseService.query(id=id, tenant_id=tenant_id) if not kbs: - return get_error_data_result(message=f"You don't own the dataset {id}") + errors.append(f"You don't own the dataset {id}") + continue for doc in DocumentService.query(kb_id=id): if not DocumentService.remove_document(doc, tenant_id): - return get_error_data_result( - message="Remove document error.(Database error)" - ) + errors.append(f"Remove document error for dataset {id}") + continue f2d = File2DocumentService.get_by_document_id(doc.id) FileService.filter_delete( [ @@ -260,7 +262,17 @@ def delete(tenant_id): FileService.filter_delete( [File.source_type == FileSource.KNOWLEDGEBASE, File.type == "folder", File.name == kbs[0].name]) if not KnowledgebaseService.delete_by_id(id): - return get_error_data_result(message="Delete dataset error.(Database error)") + errors.append(f"Delete dataset error for {id}") + continue + success_count += 1 + if errors: + if success_count > 0: + return get_result( + data={"success_count": success_count, "errors": errors}, + message=f"Partially deleted {success_count} datasets with {len(errors)} errors" + ) + else: + return get_error_data_result(message="; ".join(errors)) return get_result(code=settings.RetCode.SUCCESS)