Refactor subscription retrieval logic to limit results to the most recent active subscription. Updated query execution to return the first scalar result for improved performance.
This commit is contained in:
@@ -14,13 +14,15 @@ async def get_active_subscription_by_user_id(
|
|||||||
user_id: int,
|
user_id: int,
|
||||||
panel_user_uuid: Optional[str] = None) -> Optional[Subscription]:
|
panel_user_uuid: Optional[str] = None) -> Optional[Subscription]:
|
||||||
stmt = select(Subscription).where(
|
stmt = select(Subscription).where(
|
||||||
Subscription.user_id == user_id, Subscription.is_active == True,
|
Subscription.user_id == user_id,
|
||||||
Subscription.end_date > datetime.now(timezone.utc))
|
Subscription.is_active == True,
|
||||||
|
Subscription.end_date > datetime.now(timezone.utc),
|
||||||
|
)
|
||||||
if panel_user_uuid:
|
if panel_user_uuid:
|
||||||
stmt = stmt.where(Subscription.panel_user_uuid == panel_user_uuid)
|
stmt = stmt.where(Subscription.panel_user_uuid == panel_user_uuid)
|
||||||
stmt = stmt.order_by(Subscription.end_date.desc())
|
stmt = stmt.order_by(Subscription.end_date.desc()).limit(1)
|
||||||
result = await session.execute(stmt)
|
result = await session.execute(stmt)
|
||||||
return result.scalar_one_or_none()
|
return result.scalars().first()
|
||||||
|
|
||||||
|
|
||||||
async def get_subscription_by_panel_subscription_uuid(
|
async def get_subscription_by_panel_subscription_uuid(
|
||||||
|
|||||||
Reference in New Issue
Block a user