Update subscription.py

This commit is contained in:
Egor
2025-09-06 02:05:49 +03:00
committed by GitHub
parent f7c8c82775
commit 095c3a8490

View File

@@ -1801,35 +1801,54 @@ async def confirm_purchase(
existing_subscription = db_user.subscription
if existing_subscription:
logger.info(f"Обновляем существующую подписку пользователя {db_user.telegram_id}")
existing_subscription.is_trial = False
existing_subscription.status = SubscriptionStatus.ACTIVE.value
existing_subscription.traffic_limit_gb = final_traffic_gb
existing_subscription.device_limit = data['devices']
existing_subscription.connected_squads = data['countries']
existing_subscription.start_date = datetime.utcnow()
existing_subscription.end_date = datetime.utcnow() + timedelta(days=data['period_days'])
existing_subscription.updated_at = datetime.utcnow()
existing_subscription.traffic_used_gb = 0.0
await db.commit()
await db.refresh(existing_subscription)
subscription = existing_subscription
else:
logger.info(f"Создаем новую подписку для пользователя {db_user.telegram_id}")
subscription = await create_paid_subscription_with_traffic_mode(
db=db,
user_id=db_user.id,
duration_days=data['period_days'],
device_limit=data['devices'],
connected_squads=data['countries'],
traffic_gb=final_traffic_gb
)
if existing_subscription:
logger.info(f"Обновляем существующую подписку пользователя {db_user.telegram_id}")
if existing_subscription.is_trial:
logger.info(f"🎯 Конверсия из триала в платную для пользователя {db_user.telegram_id}")
trial_duration = (datetime.utcnow() - existing_subscription.start_date).days
try:
from app.database.crud.subscription_conversion import create_subscription_conversion
await create_subscription_conversion(
db=db,
user_id=db_user.id,
trial_duration_days=trial_duration,
payment_method="balance",
first_payment_amount_kopeks=final_price,
first_paid_period_days=data['period_days']
)
logger.info(f"✅ Записана конверсия: {trial_duration} дн. триал → {data['period_days']} дн. платная за {final_price/100}")
except Exception as conversion_error:
logger.error(f"❌ Ошибка записи конверсии: {conversion_error}")
existing_subscription.is_trial = False
existing_subscription.status = SubscriptionStatus.ACTIVE.value
existing_subscription.traffic_limit_gb = final_traffic_gb
existing_subscription.device_limit = data['devices']
existing_subscription.connected_squads = data['countries']
existing_subscription.start_date = datetime.utcnow()
existing_subscription.end_date = datetime.utcnow() + timedelta(days=data['period_days'])
existing_subscription.updated_at = datetime.utcnow()
existing_subscription.traffic_used_gb = 0.0
await db.commit()
await db.refresh(existing_subscription)
subscription = existing_subscription
else:
logger.info(f"Создаем новую подписку для пользователя {db_user.telegram_id}")
subscription = await create_paid_subscription_with_traffic_mode(
db=db,
user_id=db_user.id,
duration_days=data['period_days'],
device_limit=data['devices'],
connected_squads=data['countries'],
traffic_gb=final_traffic_gb
)
from app.utils.user_utils import mark_user_as_had_paid_subscription
await mark_user_as_had_paid_subscription(db, db_user)