Skip to content

Commit 53ff4b5

Browse files
committed
fix(user): try to fix remove expired users job
1 parent 2d07c50 commit 53ff4b5

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

app/db/crud/user.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
UserStatus,
2222
UserSubscriptionUpdate,
2323
UserUsageResetLogs,
24+
users_groups_association,
2425
)
2526
from app.models.proxy import ProxyTable
2627
from 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+
479493
async 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

Comments
 (0)