diff --git a/app/services/referral_service.py b/app/services/referral_service.py index 1b22f4f3..a68ed10d 100644 --- a/app/services/referral_service.py +++ b/app/services/referral_service.py @@ -20,7 +20,7 @@ async def process_referral_registration( referrer = await get_user_by_id(db, referrer_id) if not new_user or not referrer: - logger.error(f"Пользователи не найдены: {new_user_id}, {referrer_id}") + logger.error(f"Пользователи не найдены: new_user_id={new_user_id}, referrer_id={referrer_id}") return False if new_user.referred_by_id != referrer_id: @@ -81,9 +81,13 @@ async def process_referral_purchase( logger.info(f"🔍 Покупка реферала {user_id}: первая = {is_first_purchase}, сумма = {purchase_amount_kopeks/100}₽") - if is_first_purchase: + if is_first_purchase and settings.REFERRAL_REGISTRATION_REWARD > 0: reward_amount = settings.REFERRAL_REGISTRATION_REWARD + if reward_amount > 1000000: + logger.error(f"❌ КРИТИЧЕСКАЯ ОШИБКА: reward_amount = {reward_amount} слишком большой! Проверьте настройки REFERRAL_REGISTRATION_REWARD") + reward_amount = 10000 + await add_user_balance( db, referrer, reward_amount, f"Реферальная награда за первую покупку {user.full_name}" @@ -100,12 +104,18 @@ async def process_referral_purchase( logger.info(f"🎉 Первая покупка реферала: {referrer.telegram_id} получил {reward_amount/100}₽") - commission_amount = int(purchase_amount_kopeks * settings.REFERRAL_COMMISSION_PERCENT / 100) + if not (0 <= settings.REFERRAL_COMMISSION_PERCENT <= 100): + logger.error(f"❌ КРИТИЧЕСКАЯ ОШИБКА: REFERRAL_COMMISSION_PERCENT = {settings.REFERRAL_COMMISSION_PERCENT} некорректный! Должен быть от 0 до 100") + commission_percent = 10 + else: + commission_percent = settings.REFERRAL_COMMISSION_PERCENT + + commission_amount = int(purchase_amount_kopeks * commission_percent / 100) if commission_amount > 0: await add_user_balance( db, referrer, commission_amount, - f"Комиссия {settings.REFERRAL_COMMISSION_PERCENT}% с покупки {user.full_name}" + f"Комиссия {commission_percent}% с покупки {user.full_name}" ) await create_referral_earning( @@ -128,6 +138,8 @@ async def process_referral_purchase( except Exception as e: logger.error(f"Ошибка обработки покупки реферала: {e}") + import traceback + logger.error(f"Полный traceback: {traceback.format_exc()}") return False @@ -141,7 +153,7 @@ async def get_referral_stats_for_user(db: AsyncSession, user_id: int) -> dict: invited_count_result = await db.execute( select(func.count(User.id)).where(User.referred_by_id == user_id) ) - invited_count = invited_count_result.scalar() + invited_count = invited_count_result.scalar() or 0 paid_referrals_result = await db.execute( select(func.count(User.id)).where( @@ -149,13 +161,13 @@ async def get_referral_stats_for_user(db: AsyncSession, user_id: int) -> dict: User.has_had_paid_subscription == True ) ) - paid_referrals_count = paid_referrals_result.scalar() + paid_referrals_count = paid_referrals_result.scalar() or 0 - total_earned = await get_referral_earnings_sum(db, user_id) + total_earned = await get_referral_earnings_sum(db, user_id) or 0 from datetime import datetime, timedelta month_ago = datetime.utcnow() - timedelta(days=30) - month_earned = await get_referral_earnings_sum(db, user_id, start_date=month_ago) + month_earned = await get_referral_earnings_sum(db, user_id, start_date=month_ago) or 0 return { "invited_count": invited_count, @@ -171,4 +183,4 @@ async def get_referral_stats_for_user(db: AsyncSession, user_id: int) -> dict: "paid_referrals_count": 0, "total_earned_kopeks": 0, "month_earned_kopeks": 0 - } \ No newline at end of file + }