2222 User ,
2323 UserData ,
2424)
25- from app .models .AvailableTime import available_times
2625from app .models .SuggestedTime import suggested_times
2726from app .schemas .availability import AvailabilityTemplateSlot
2827from app .schemas .user import (
@@ -124,19 +123,18 @@ async def delete_user_by_id(self, user_id: str):
124123 Delete a user and all related data in the correct order to respect FK constraints.
125124
126125 Deletion order:
127- 1. available_times junction table (User <-> TimeBlock)
128- 2. UserData many-to-many relationships (treatments, experiences, loved_one_*)
129- 3. UserData
130- 4. VolunteerData
131- 5. AvailabilityTemplate records
132- 6. RankingPreference records
133- 7. FormSubmission records
134- 8. suggested_times junction table (Match <-> TimeBlock) for user's matches
135- 9. Soft-delete Match records (set deleted_at for audit)
136- 10. Hard delete Match records
137- 11. Handle Task records (set participant_id/assignee_id to NULL)
138- 12. Delete User record
139- 13. Delete Firebase user
126+ 1. UserData many-to-many relationships (treatments, experiences, loved_one_*)
127+ 2. UserData
128+ 3. VolunteerData
129+ 4. AvailabilityTemplate records
130+ 5. RankingPreference records
131+ 6. FormSubmission records
132+ 7. suggested_times junction table (Match <-> TimeBlock) for user's matches
133+ 8. Soft-delete Match records (set deleted_at for audit)
134+ 9. Hard delete Match records
135+ 10. Handle Task records (set participant_id/assignee_id to NULL)
136+ 11. Delete User record
137+ 12. Delete Firebase user
140138 """
141139 firebase_auth_id = None
142140 try :
@@ -147,34 +145,31 @@ async def delete_user_by_id(self, user_id: str):
147145 # Store Firebase auth_id before deletion
148146 firebase_auth_id = db_user .auth_id
149147
150- # 1. Delete available_times entries (User <-> TimeBlock junction table)
151- self .db .execute (available_times .delete ().where (available_times .c .user_id == db_user .id ))
152-
153- # 2. Clear many-to-many relationships in UserData
148+ # 1. Clear many-to-many relationships in UserData
154149 if db_user .user_data :
155150 db_user .user_data .treatments .clear ()
156151 db_user .user_data .experiences .clear ()
157152 db_user .user_data .loved_one_treatments .clear ()
158153 db_user .user_data .loved_one_experiences .clear ()
159154
160- # 3 . Delete UserData
155+ # 2 . Delete UserData
161156 if db_user .user_data :
162157 self .db .delete (db_user .user_data )
163158
164- # 4 . Delete VolunteerData
159+ # 3 . Delete VolunteerData
165160 if db_user .volunteer_data :
166161 self .db .delete (db_user .volunteer_data )
167162
168- # 5 . Delete AvailabilityTemplate records
163+ # 4 . Delete AvailabilityTemplate records
169164 self .db .query (AvailabilityTemplate ).filter (AvailabilityTemplate .user_id == db_user .id ).delete ()
170165
171- # 6 . Delete RankingPreference records
166+ # 5 . Delete RankingPreference records
172167 self .db .query (RankingPreference ).filter (RankingPreference .user_id == db_user .id ).delete ()
173168
174- # 7 . Delete FormSubmission records
169+ # 6 . Delete FormSubmission records
175170 self .db .query (FormSubmission ).filter (FormSubmission .user_id == db_user .id ).delete ()
176171
177- # 8 . Delete suggested_times entries for matches involving this user
172+ # 7 . Delete suggested_times entries for matches involving this user
178173 # First get all match IDs for this user
179174 user_match_ids = (
180175 self .db .query (Match .id )
@@ -187,31 +182,31 @@ async def delete_user_by_id(self, user_id: str):
187182 # Delete suggested_times entries for these matches
188183 self .db .execute (suggested_times .delete ().where (suggested_times .c .match_id .in_ (match_ids )))
189184
190- # 9 . Soft-delete Match records (set deleted_at timestamp for audit trail)
185+ # 8 . Soft-delete Match records (set deleted_at timestamp for audit trail)
191186 self .db .query (Match ).filter (
192187 (Match .participant_id == db_user .id ) | (Match .volunteer_id == db_user .id )
193188 ).update ({Match .deleted_at : func .now ()}, synchronize_session = False )
194189
195- # 10 . Hard delete Match records (now safe - all FK constraints cleared)
190+ # 9 . Hard delete Match records (now safe - all FK constraints cleared)
196191 self .db .query (Match ).filter (
197192 (Match .participant_id == db_user .id ) | (Match .volunteer_id == db_user .id )
198193 ).delete (synchronize_session = False )
199194
200- # 11 . Handle Task records - set participant_id and assignee_id to NULL
195+ # 10 . Handle Task records - set participant_id and assignee_id to NULL
201196 self .db .query (Task ).filter (Task .participant_id == db_user .id ).update (
202197 {Task .participant_id : None }, synchronize_session = False
203198 )
204199 self .db .query (Task ).filter (Task .assignee_id == db_user .id ).update (
205200 {Task .assignee_id : None }, synchronize_session = False
206201 )
207202
208- # 12 . Delete the User record
203+ # 11 . Delete the User record
209204 self .db .delete (db_user )
210205
211206 # Commit all database changes
212207 self .db .commit ()
213208
214- # 13 . Delete Firebase user (after successful DB deletion)
209+ # 12 . Delete Firebase user (after successful DB deletion)
215210 if firebase_auth_id :
216211 try :
217212 firebase_admin .auth .delete_user (firebase_auth_id )
0 commit comments