Skip to content

Commit a011a43

Browse files
committed
fix delete user function
1 parent b7db820 commit a011a43

File tree

2 files changed

+24
-42
lines changed

2 files changed

+24
-42
lines changed

backend/app/models/AvailableTime.py

Lines changed: 0 additions & 13 deletions
This file was deleted.

backend/app/services/implementations/user_service.py

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
User,
2323
UserData,
2424
)
25-
from app.models.AvailableTime import available_times
2625
from app.models.SuggestedTime import suggested_times
2726
from app.schemas.availability import AvailabilityTemplateSlot
2827
from 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

Comments
 (0)