Update subscription.py

This commit is contained in:
Egor
2025-08-25 03:12:46 +03:00
committed by GitHub
parent 25cf635b6f
commit eb8b09e658

View File

@@ -20,7 +20,12 @@ async def get_subscription_by_user_id(db: AsyncSession, user_id: int) -> Optiona
.options(selectinload(Subscription.user))
.where(Subscription.user_id == user_id)
)
return result.scalar_one_or_none()
subscription = result.scalar_one_or_none()
if subscription:
subscription = await check_and_update_subscription_status(db, subscription)
return subscription
async def create_trial_subscription(
@@ -510,6 +515,41 @@ async def get_subscription_renewal_cost(
from app.config import PERIOD_PRICES
return PERIOD_PRICES.get(period_days, 0)
async def expire_subscription(
db: AsyncSession,
subscription: Subscription
) -> Subscription:
subscription.status = SubscriptionStatus.EXPIRED.value
subscription.updated_at = datetime.utcnow()
await db.commit()
await db.refresh(subscription)
logger.info(f"⏰ Подписка пользователя {subscription.user_id} помечена как истёкшая")
return subscription
async def check_and_update_subscription_status(
db: AsyncSession,
subscription: Subscription
) -> Subscription:
current_time = datetime.utcnow()
if (subscription.status == SubscriptionStatus.ACTIVE.value and
subscription.end_date <= current_time):
subscription.status = SubscriptionStatus.EXPIRED.value
subscription.updated_at = current_time
await db.commit()
await db.refresh(subscription)
logger.info(f"⏰ Статус подписки пользователя {subscription.user_id} изменен на 'expired'")
return subscription
async def create_subscription(
db: AsyncSession,
user_id: int,