diff --git a/src/backend/base/langflow/api/utils.py b/src/backend/base/langflow/api/utils.py index 62bd81cc3..fb02a5402 100644 --- a/src/backend/base/langflow/api/utils.py +++ b/src/backend/base/langflow/api/utils.py @@ -283,6 +283,11 @@ async def cascade_delete_flow(session: AsyncSession, flow_id: uuid.UUID) -> None try: await session.exec(delete(TransactionTable).where(TransactionTable.flow_id == flow_id)) await session.exec(delete(VertexBuildTable).where(VertexBuildTable.flow_id == flow_id)) + # TODO: Verify if deleting messages is safe in terms of session id relevance + # If we delete messages directly, rather than setting flow_id to null, + # it might cause unexpected behaviors because the session id could still be + # used elsewhere to search for these messages. + # await session.exec(delete(MessageTable).where(MessageTable.flow_id == flow_id)) await session.exec(delete(Flow).where(Flow.id == flow_id)) except Exception as e: msg = f"Unable to cascade delete flow: ${flow_id}" diff --git a/src/backend/base/langflow/api/v1/flows.py b/src/backend/base/langflow/api/v1/flows.py index 2f350222b..6ce4d6d2b 100644 --- a/src/backend/base/langflow/api/v1/flows.py +++ b/src/backend/base/langflow/api/v1/flows.py @@ -25,8 +25,6 @@ from langflow.services.database.models.flow.model import FlowHeader from langflow.services.database.models.flow.utils import get_webhook_component_in_flow from langflow.services.database.models.folder.constants import DEFAULT_FOLDER_NAME from langflow.services.database.models.folder.model import Folder -from langflow.services.database.models.transactions.crud import get_transactions_by_flow_id -from langflow.services.database.models.vertex_builds.crud import get_vertex_builds_by_flow_id from langflow.services.deps import get_settings_service from langflow.services.settings.service import SettingsService @@ -423,15 +421,7 @@ async def delete_multiple_flows( await db.exec(select(Flow).where(col(Flow.id).in_(flow_ids)).where(Flow.user_id == user.id)) ).all() for flow in flows_to_delete: - transactions_to_delete = await get_transactions_by_flow_id(db, flow.id) - for transaction in transactions_to_delete: - await db.delete(transaction) - - builds_to_delete = await get_vertex_builds_by_flow_id(db, flow.id) - for build in builds_to_delete: - await db.delete(build) - - await db.delete(flow) + await cascade_delete_flow(db, flow.id) await db.commit() return {"deleted": len(flows_to_delete)}