Skip to content

Commit c9ac731

Browse files
committed
Fix user deletion
1 parent eddd2d3 commit c9ac731

File tree

1 file changed

+32
-8
lines changed

1 file changed

+32
-8
lines changed

gefapi/services/user_service.py

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -764,29 +764,53 @@ def delete_user(user_id):
764764
# Import models for explicit deletion
765765
from sqlalchemy import String, cast
766766

767-
from gefapi.models import Execution, Script, StatusLog
767+
from gefapi.models import Execution, ExecutionLog, Script, StatusLog
768768
from gefapi.models.password_reset_token import PasswordResetToken
769769
from gefapi.models.refresh_token import RefreshToken
770+
from gefapi.models.script_log import ScriptLog
770771

771772
user_uuid = user.id
772773

773-
# Batch delete related records for performance
774-
# Delete status logs for user's executions first
775-
# StatusLog.execution_id is String(36), so cast UUID to string
776-
logger.info("[DB]: Deleting status logs for user's executions")
777-
execution_ids = db.session.query(cast(Execution.id, String)).filter(
774+
# Get execution IDs for this user (needed for related table deletions)
775+
execution_ids_uuid = db.session.query(Execution.id).filter(
778776
Execution.user_id == user_uuid
779777
)
780-
StatusLog.query.filter(StatusLog.execution_id.in_(execution_ids)).delete(
781-
synchronize_session=False
778+
# Cast to string for StatusLog which uses String(36) for execution_id
779+
execution_ids_str = db.session.query(cast(Execution.id, String)).filter(
780+
Execution.user_id == user_uuid
782781
)
783782

783+
# Get script IDs for this user (needed for script log deletions)
784+
script_ids_uuid = db.session.query(Script.id).filter(
785+
Script.user_id == user_uuid
786+
)
787+
788+
# Batch delete related records for performance
789+
# Delete status logs for user's executions first
790+
# StatusLog.execution_id is String(36), so use string-cast query
791+
logger.info("[DB]: Deleting status logs for user's executions")
792+
StatusLog.query.filter(
793+
StatusLog.execution_id.in_(execution_ids_str)
794+
).delete(synchronize_session=False)
795+
796+
# Delete execution logs (uses UUID foreign key)
797+
logger.info("[DB]: Deleting execution logs for user's executions")
798+
ExecutionLog.query.filter(
799+
ExecutionLog.execution_id.in_(execution_ids_uuid)
800+
).delete(synchronize_session=False)
801+
784802
# Delete executions
785803
logger.info("[DB]: Deleting executions")
786804
Execution.query.filter(Execution.user_id == user_uuid).delete(
787805
synchronize_session=False
788806
)
789807

808+
# Delete script logs for user's scripts
809+
logger.info("[DB]: Deleting script logs for user's scripts")
810+
ScriptLog.query.filter(ScriptLog.script_id.in_(script_ids_uuid)).delete(
811+
synchronize_session=False
812+
)
813+
790814
# Delete scripts
791815
logger.info("[DB]: Deleting scripts")
792816
Script.query.filter(Script.user_id == user_uuid).delete(

0 commit comments

Comments
 (0)