From c8aba42d3db7e9fd3ec751b7bd90504d574e0245 Mon Sep 17 00:00:00 2001 From: Egor Date: Tue, 4 Nov 2025 16:33:34 +0300 Subject: [PATCH] Reload user after MulenPay callback commit --- app/services/payment/mulenpay.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/app/services/payment/mulenpay.py b/app/services/payment/mulenpay.py index fe27ab25..4ef4f1bf 100644 --- a/app/services/payment/mulenpay.py +++ b/app/services/payment/mulenpay.py @@ -270,11 +270,24 @@ class MulenPayPaymentMixin: user.has_made_first_topup = True await db.commit() - await db.refresh(user) + # После коммита отношения пользователя могли быть сброшены, поэтому + # повторно загружаем пользователя с предзагрузкой зависимостей + user = await payment_module.get_user_by_id(db, user.id) + if not user: + logger.error( + "Пользователь %s не найден при повторной загрузке после %s", + payment.user_id, + display_name, + ) + return False # Используем предзагруженные значения для избежания lazy-загрузки - promo_group = user.promo_group if hasattr(user, 'promo_group') and user.promo_group else None - subscription = user.subscription if hasattr(user, 'subscription') and user.subscription else None + promo_group = ( + user.promo_group if hasattr(user, "promo_group") and user.promo_group else None + ) + subscription = ( + user.subscription if hasattr(user, "subscription") and user.subscription else None + ) referrer_info = format_referrer_info(user) topup_status = ( "🆕 Первое пополнение" if was_first_topup else "🔄 Пополнение"