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