Merge pull request #2317 from BEDOLAGA-DEV/dev5

Update admin_users.py
This commit is contained in:
Egor
2026-01-17 06:21:31 +03:00
committed by GitHub

View File

@@ -119,7 +119,7 @@ def _build_user_list_item(user: User, spending_stats: dict = None) -> UserListIt
)
def _build_subscription_info(subscription: Subscription) -> UserSubscriptionInfo:
def _build_subscription_info(subscription: Subscription, tariff_name: Optional[str] = None) -> UserSubscriptionInfo:
"""Build UserSubscriptionInfo from Subscription model."""
days_remaining = 0
is_active = False
@@ -132,12 +132,6 @@ def _build_subscription_info(subscription: Subscription) -> UserSubscriptionInfo
and subscription.end_date > datetime.utcnow()
)
tariff_name = None
if subscription.tariff_id:
tariff = getattr(subscription, "tariff", None)
if tariff:
tariff_name = tariff.name
return UserSubscriptionInfo(
id=subscription.id,
status=subscription.status,
@@ -155,6 +149,16 @@ def _build_subscription_info(subscription: Subscription) -> UserSubscriptionInfo
)
async def _build_subscription_info_async(db: AsyncSession, subscription: Subscription) -> UserSubscriptionInfo:
"""Build UserSubscriptionInfo from Subscription model, fetching tariff name asynchronously."""
tariff_name = None
if subscription.tariff_id:
tariff = await get_tariff_by_id(db, subscription.tariff_id)
if tariff:
tariff_name = tariff.name
return _build_subscription_info(subscription, tariff_name=tariff_name)
# === List & Search ===
@router.get("", response_model=UsersListResponse)
@@ -337,7 +341,7 @@ async def get_user_detail(
# Build subscription info
subscription_info = None
if user.subscription:
subscription_info = _build_subscription_info(user.subscription)
subscription_info = await _build_subscription_info_async(db, user.subscription)
# Build promo group info
promo_group_info = None
@@ -582,7 +586,7 @@ async def update_user_subscription(
return UpdateSubscriptionResponse(
success=True,
message=f"Subscription created for {days} days",
subscription=_build_subscription_info(new_sub),
subscription=await _build_subscription_info_async(db, new_sub),
)
if not subscription:
@@ -609,7 +613,7 @@ async def update_user_subscription(
return UpdateSubscriptionResponse(
success=True,
message=f"Subscription extended by {request.days} days",
subscription=_build_subscription_info(subscription),
subscription=await _build_subscription_info_async(db, subscription),
)
elif request.action == "set_end_date":
@@ -633,7 +637,7 @@ async def update_user_subscription(
return UpdateSubscriptionResponse(
success=True,
message=f"Subscription end date set to {request.end_date.isoformat()}",
subscription=_build_subscription_info(subscription),
subscription=await _build_subscription_info_async(db, subscription),
)
elif request.action == "change_tariff":
@@ -663,7 +667,7 @@ async def update_user_subscription(
return UpdateSubscriptionResponse(
success=True,
message=f"Tariff changed to {tariff.name}",
subscription=_build_subscription_info(subscription),
subscription=await _build_subscription_info_async(db, subscription),
)
elif request.action == "set_traffic":
@@ -681,7 +685,7 @@ async def update_user_subscription(
return UpdateSubscriptionResponse(
success=True,
message="Traffic settings updated",
subscription=_build_subscription_info(subscription),
subscription=await _build_subscription_info_async(db, subscription),
)
elif request.action == "toggle_autopay":
@@ -701,7 +705,7 @@ async def update_user_subscription(
return UpdateSubscriptionResponse(
success=True,
message=f"Autopay {state}",
subscription=_build_subscription_info(subscription),
subscription=await _build_subscription_info_async(db, subscription),
)
elif request.action == "cancel":
@@ -715,7 +719,7 @@ async def update_user_subscription(
return UpdateSubscriptionResponse(
success=True,
message="Subscription cancelled",
subscription=_build_subscription_info(subscription),
subscription=await _build_subscription_info_async(db, subscription),
)
elif request.action == "activate":
@@ -731,7 +735,7 @@ async def update_user_subscription(
return UpdateSubscriptionResponse(
success=True,
message="Subscription activated",
subscription=_build_subscription_info(subscription),
subscription=await _build_subscription_info_async(db, subscription),
)
else:
@@ -1194,7 +1198,10 @@ async def get_user_sync_status(
differences.append(f"Status: bot={bot_sub_status}, panel={panel_status}")
if bot_sub_end_date and panel_expire_at:
diff_seconds = abs((bot_sub_end_date - panel_expire_at).total_seconds())
# Convert both to naive UTC for comparison
bot_end_naive = bot_sub_end_date.replace(tzinfo=None) if bot_sub_end_date.tzinfo else bot_sub_end_date
panel_end_naive = panel_expire_at.replace(tzinfo=None) if panel_expire_at.tzinfo else panel_expire_at
diff_seconds = abs((bot_end_naive - panel_end_naive).total_seconds())
if diff_seconds > 3600: # More than 1 hour difference
differences.append(f"End date differs by {diff_seconds/3600:.1f} hours")