2121 UserStatus ,
2222 UserSubscriptionUpdate ,
2323 UserUsageResetLogs ,
24+ users_groups_association ,
2425)
2526from app .models .proxy import ProxyTable
2627from app .models .stats import Period , UserUsageStat , UserUsageStatsList
@@ -476,6 +477,19 @@ async def create_user(db: AsyncSession, new_user: UserCreate, groups: list[Group
476477 return db_user
477478
478479
480+ async def _delete_user_dependencies (db : AsyncSession , user_ids : list [int ]):
481+ """Remove all rows that reference the given user IDs."""
482+ if not user_ids :
483+ return
484+
485+ await db .execute (delete (NodeUserUsage ).where (NodeUserUsage .user_id .in_ (user_ids )))
486+ await db .execute (delete (NotificationReminder ).where (NotificationReminder .user_id .in_ (user_ids )))
487+ await db .execute (delete (UserSubscriptionUpdate ).where (UserSubscriptionUpdate .user_id .in_ (user_ids )))
488+ await db .execute (delete (UserUsageResetLogs ).where (UserUsageResetLogs .user_id .in_ (user_ids )))
489+ await db .execute (delete (NextPlan ).where (NextPlan .user_id .in_ (user_ids )))
490+ await db .execute (users_groups_association .delete ().where (users_groups_association .c .user_id .in_ (user_ids )))
491+
492+
479493async def remove_user (db : AsyncSession , db_user : User ) -> User :
480494 """
481495 Removes a user from the database.
@@ -487,7 +501,8 @@ async def remove_user(db: AsyncSession, db_user: User) -> User:
487501 Returns:
488502 User: Removed user object.
489503 """
490- await db .delete (db_user )
504+ await _delete_user_dependencies (db , [db_user .id ])
505+ await db .execute (delete (User ).where (User .id == db_user .id ))
491506 await db .commit ()
492507 return db_user
493508
@@ -498,10 +513,14 @@ async def remove_users(db: AsyncSession, db_users: list[User]):
498513
499514 Args:
500515 db (AsyncSession): Database session.
501- dbusers (list[User]): List of user objects to be removed.
516+ db_users (list[User]): List of user objects to be removed.
502517 """
503- user_ids = [user .id for user in db_users ]
518+ if not db_users :
519+ return
520+
521+ user_ids = list ({user .id for user in db_users })
504522
523+ await _delete_user_dependencies (db , user_ids )
505524 await db .execute (delete (User ).where (User .id .in_ (user_ids )))
506525 await db .commit ()
507526
0 commit comments