style: fix ruff format for all sync-related changes
This commit is contained in:
@@ -169,6 +169,7 @@ async def toggle_subscription_pause(
|
||||
except Exception as e:
|
||||
logger.error('Error syncing RemnaWave user on resume', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=user.id,
|
||||
|
||||
@@ -235,6 +235,7 @@ async def purchase_devices_legacy(
|
||||
except Exception as e:
|
||||
logger.error('Failed to sync devices with RemnaWave (legacy endpoint)', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=user.id,
|
||||
@@ -482,6 +483,7 @@ async def purchase_devices(
|
||||
except Exception as e:
|
||||
logger.error('Failed to sync devices with RemnaWave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=user.id,
|
||||
|
||||
@@ -912,6 +912,7 @@ async def purchase_tariff(
|
||||
except Exception as remnawave_error:
|
||||
logger.error('Failed to sync subscription with RemnaWave', remnawave_error=remnawave_error)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=user.id,
|
||||
@@ -1263,6 +1264,7 @@ async def activate_trial(
|
||||
except Exception as e:
|
||||
logger.error('Failed to create RemnaWave user for trial', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=user.id,
|
||||
|
||||
@@ -250,6 +250,7 @@ async def update_countries(
|
||||
except Exception as e:
|
||||
logger.error('Failed to sync countries with RemnaWave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=user.id,
|
||||
|
||||
@@ -429,6 +429,7 @@ async def switch_tariff(
|
||||
except Exception as e:
|
||||
logger.error('Failed to sync tariff switch with RemnaWave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=user.id,
|
||||
|
||||
@@ -330,6 +330,7 @@ async def purchase_traffic(
|
||||
except Exception as e:
|
||||
logger.error('Failed to sync traffic with RemnaWave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=user.id,
|
||||
@@ -622,6 +623,7 @@ async def switch_traffic_package(
|
||||
except Exception as e:
|
||||
logger.error('Failed to sync traffic switch with RemnaWave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
|
||||
@@ -124,9 +124,7 @@ async def clear_trial_tariff(db: AsyncSession) -> None:
|
||||
|
||||
async def get_all_active_tariffs(db: AsyncSession) -> list[Tariff]:
|
||||
"""Get all active tariffs."""
|
||||
result = await db.execute(
|
||||
select(Tariff).where(Tariff.is_active.is_(True)).order_by(Tariff.tier_level)
|
||||
)
|
||||
result = await db.execute(select(Tariff).where(Tariff.is_active.is_(True)).order_by(Tariff.tier_level))
|
||||
return list(result.scalars().all())
|
||||
|
||||
|
||||
|
||||
@@ -550,6 +550,7 @@ async def handle_simple_subscription_pay_with_balance(
|
||||
exc_info=True,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
@@ -2297,6 +2298,7 @@ async def confirm_simple_subscription_purchase(
|
||||
exc_info=True,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
|
||||
@@ -254,6 +254,7 @@ async def _handle_trial_payment(
|
||||
logger.error('Ошибка создания пользователя RemnaWave для триала', rw_error=rw_error)
|
||||
# Не откатываем подписку, просто логируем - RemnaWave может быть временно недоступен
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
|
||||
@@ -235,6 +235,7 @@ async def _claim_phantom_user(
|
||||
error=str(exc),
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(phantom_sub, 'id') and hasattr(phantom_sub, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=phantom_sub.id,
|
||||
@@ -2451,13 +2452,16 @@ async def required_sub_channel_check(
|
||||
api_error=api_error,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
for sub in _subs:
|
||||
if sub.is_trial and sub.status == SubscriptionStatus.ACTIVE.value:
|
||||
if hasattr(sub, 'id') and hasattr(sub, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=sub.id,
|
||||
user_id=sub.user_id,
|
||||
action='update' if (getattr(sub, 'remnawave_uuid', None) or user.remnawave_uuid) else 'create',
|
||||
action='update'
|
||||
if (getattr(sub, 'remnawave_uuid', None) or user.remnawave_uuid)
|
||||
else 'create',
|
||||
)
|
||||
|
||||
await query.answer(
|
||||
|
||||
@@ -417,6 +417,7 @@ async def apply_countries_changes(callback: types.CallbackQuery, db_user: User,
|
||||
except Exception as rw_err:
|
||||
logger.error('Ошибка синхронизации с RemnaWave при смене стран', error=rw_err)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
|
||||
@@ -2624,6 +2624,7 @@ async def confirm_purchase(callback: types.CallbackQuery, state: FSMContext, db_
|
||||
except Exception as retry_error:
|
||||
logger.error('Повторная попытка создания RemnaWave пользователя также не удалась', error=retry_error)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=db_user.id,
|
||||
@@ -3179,6 +3180,7 @@ async def handle_toggle_daily_subscription_pause(callback: types.CallbackQuery,
|
||||
except Exception as e:
|
||||
logger.error('Ошибка синхронизации с Remnawave при возобновлении', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=db_user.id,
|
||||
@@ -4624,6 +4626,7 @@ async def _extend_existing_subscription(
|
||||
except Exception as e:
|
||||
logger.error('⚠ ИСКЛЮЧЕНИЕ ПРИ ОБНОВЛЕНИИ REMNAWAVE', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=current_subscription.id,
|
||||
user_id=db_user.id,
|
||||
|
||||
@@ -1079,6 +1079,7 @@ async def handle_custom_confirm(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка обновления Remnawave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=db_user.id,
|
||||
@@ -1609,6 +1610,7 @@ async def confirm_tariff_purchase(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка обновления Remnawave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=db_user.id,
|
||||
@@ -1888,6 +1890,7 @@ async def confirm_daily_tariff_purchase(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка обновления Remnawave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=db_user.id,
|
||||
@@ -2359,6 +2362,7 @@ async def confirm_tariff_extend(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка обновления Remnawave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=db_user.id,
|
||||
@@ -2991,6 +2995,7 @@ async def confirm_tariff_switch(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка обновления Remnawave при переключении тарифа', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=db_user.id,
|
||||
@@ -3238,6 +3243,7 @@ async def confirm_daily_tariff_switch(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка обновления Remnawave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=db_user.id,
|
||||
@@ -3931,6 +3937,7 @@ async def confirm_instant_switch(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка обновления Remnawave при мгновенном переключении', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=db_user.id,
|
||||
|
||||
@@ -265,6 +265,7 @@ class DailySubscriptionService:
|
||||
except Exception as e:
|
||||
logger.warning('Не удалось обновить Remnawave', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
@@ -547,6 +548,7 @@ class DailySubscriptionService:
|
||||
except Exception as e:
|
||||
logger.warning('Не удалось синхронизировать с RemnaWave после сброса трафика', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
|
||||
@@ -287,6 +287,7 @@ class TelegramStarsMixin:
|
||||
exc_info=True,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=subscription.user_id,
|
||||
|
||||
@@ -681,6 +681,7 @@ class YooKassaPaymentMixin:
|
||||
except Exception as rw_error:
|
||||
logger.error('Ошибка создания RemnaWave для триала', rw_error=rw_error)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=subscription.user_id,
|
||||
@@ -998,6 +999,7 @@ class YooKassaPaymentMixin:
|
||||
exc_info=True,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=subscription.user_id,
|
||||
|
||||
@@ -118,6 +118,7 @@ async def claim_phantom(
|
||||
exc_info=True,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(sub, 'id') and hasattr(sub, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=sub.id,
|
||||
@@ -213,6 +214,7 @@ async def sync_remnawave_after_phantom_merge(db: AsyncSession, user: User) -> No
|
||||
exc_info=True,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
for sub in subs:
|
||||
if hasattr(sub, 'id') and hasattr(sub, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
|
||||
@@ -217,6 +217,7 @@ class PromoOfferService:
|
||||
exc=exc,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
|
||||
@@ -41,7 +41,7 @@ async def resync_user_subscriptions_with_panel(
|
||||
)
|
||||
return {'synced': 0, 'failed': 0, 'total': 0, 'skipped': True}
|
||||
|
||||
subscriptions = await get_active_subscriptions_by_user_id(db, user.id)
|
||||
subscriptions = await get_active_subscriptions_by_user_id(db, int(user.id))
|
||||
|
||||
if not subscriptions:
|
||||
logger.info(
|
||||
|
||||
@@ -4,6 +4,7 @@ When create_remnawave_user() fails during purchase, the subscription exists
|
||||
in the bot DB but not in the panel. This queue retries the operation
|
||||
periodically until it succeeds or max retries are exhausted.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
@@ -24,7 +25,7 @@ logger = structlog.get_logger(__name__)
|
||||
class RetryItem:
|
||||
subscription_id: int
|
||||
user_id: int
|
||||
action: Literal["create", "update"]
|
||||
action: Literal['create', 'update']
|
||||
attempts: int = 0
|
||||
created_at: datetime = field(default_factory=lambda: datetime.now(UTC))
|
||||
last_error: str | None = None
|
||||
@@ -45,19 +46,21 @@ class RemnaWaveRetryQueue:
|
||||
self,
|
||||
subscription_id: int,
|
||||
user_id: int,
|
||||
action: Literal["create", "update"] = "create",
|
||||
action: Literal['create', 'update'] = 'create',
|
||||
) -> None:
|
||||
# Deduplicate by subscription_id
|
||||
for item in self._queue:
|
||||
if item.subscription_id == subscription_id:
|
||||
return
|
||||
self._queue.append(RetryItem(
|
||||
subscription_id=subscription_id,
|
||||
user_id=user_id,
|
||||
action=action,
|
||||
))
|
||||
self._queue.append(
|
||||
RetryItem(
|
||||
subscription_id=subscription_id,
|
||||
user_id=user_id,
|
||||
action=action,
|
||||
)
|
||||
)
|
||||
logger.info(
|
||||
"Enqueued RemnaWave retry",
|
||||
'Enqueued RemnaWave retry',
|
||||
subscription_id=subscription_id,
|
||||
user_id=user_id,
|
||||
action=action,
|
||||
@@ -81,23 +84,23 @@ class RemnaWaveRetryQueue:
|
||||
sub = await get_subscription_by_id(db, item.subscription_id)
|
||||
if not sub:
|
||||
logger.warning(
|
||||
"Retry: subscription not found, dropping",
|
||||
'Retry: subscription not found, dropping',
|
||||
subscription_id=item.subscription_id,
|
||||
)
|
||||
continue
|
||||
|
||||
service = SubscriptionService()
|
||||
if not service.is_configured:
|
||||
self._requeue(item, "RemnaWave not configured")
|
||||
self._requeue(item, 'RemnaWave not configured')
|
||||
continue
|
||||
|
||||
if item.action == "create":
|
||||
if item.action == 'create':
|
||||
await service.create_remnawave_user(db, sub)
|
||||
else:
|
||||
await service.update_remnawave_user(db, sub)
|
||||
|
||||
logger.info(
|
||||
"Retry succeeded",
|
||||
'Retry succeeded',
|
||||
subscription_id=item.subscription_id,
|
||||
attempts=item.attempts,
|
||||
)
|
||||
@@ -110,7 +113,7 @@ class RemnaWaveRetryQueue:
|
||||
if item.attempts < self._max_retries:
|
||||
self._queue.append(item)
|
||||
logger.warning(
|
||||
"Retry failed, re-enqueued",
|
||||
'Retry failed, re-enqueued',
|
||||
subscription_id=item.subscription_id,
|
||||
attempts=item.attempts,
|
||||
max_retries=self._max_retries,
|
||||
@@ -118,7 +121,7 @@ class RemnaWaveRetryQueue:
|
||||
)
|
||||
else:
|
||||
logger.error(
|
||||
"Retry exhausted, dropping (MANUAL INTERVENTION NEEDED)",
|
||||
'Retry exhausted, dropping (MANUAL INTERVENTION NEEDED)',
|
||||
subscription_id=item.subscription_id,
|
||||
user_id=item.user_id,
|
||||
attempts=item.attempts,
|
||||
|
||||
@@ -1886,6 +1886,7 @@ class RemnaWaveService:
|
||||
if _squad_uuids:
|
||||
try:
|
||||
from app.database.crud.tariff import get_all_active_tariffs
|
||||
|
||||
_all_tariffs = await get_all_active_tariffs(db)
|
||||
for _t in _all_tariffs:
|
||||
if _t.allowed_squads and set(_squad_uuids).issubset(set(_t.allowed_squads)):
|
||||
|
||||
@@ -584,6 +584,7 @@ async def _auto_extend_subscription(
|
||||
error=error,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(updated_subscription, 'id') and hasattr(updated_subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=updated_subscription.id,
|
||||
@@ -961,6 +962,7 @@ async def _auto_purchase_tariff(
|
||||
error=error,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
@@ -1318,6 +1320,7 @@ async def _auto_purchase_daily_tariff(
|
||||
error=error,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
@@ -1656,6 +1659,7 @@ async def _auto_add_devices(
|
||||
error=error,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
@@ -2011,6 +2015,7 @@ async def _auto_add_traffic(
|
||||
error=error,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
@@ -2369,6 +2374,7 @@ async def try_auto_extend_expired_after_topup(
|
||||
error=error,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(updated_subscription, 'id') and hasattr(updated_subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=updated_subscription.id,
|
||||
@@ -2756,6 +2762,7 @@ async def try_resume_disabled_daily_after_topup(
|
||||
error=error,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
|
||||
@@ -1189,6 +1189,7 @@ class MiniAppSubscriptionPurchaseService:
|
||||
except Exception as remnawave_error: # pragma: no cover - defensive logging
|
||||
logger.error('Failed to sync subscription with RemnaWave', remnawave_error=remnawave_error)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
user_id=user.id,
|
||||
|
||||
@@ -519,6 +519,7 @@ class SubscriptionRenewalService:
|
||||
error=error,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription_after.id,
|
||||
user_id=subscription_after.user_id,
|
||||
|
||||
@@ -769,6 +769,7 @@ class UserService:
|
||||
error=e,
|
||||
)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(sub, 'id') and hasattr(sub, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=sub.id,
|
||||
|
||||
@@ -7056,6 +7056,7 @@ async def switch_tariff_endpoint(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка синхронизации с RemnaWave при смене тарифа', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
@@ -7253,6 +7254,7 @@ async def purchase_traffic_topup_endpoint(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка синхронизации с RemnaWave при докупке трафика', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
@@ -7499,6 +7501,7 @@ async def toggle_daily_subscription_pause_endpoint(
|
||||
except Exception as e:
|
||||
logger.error('Ошибка синхронизации с RemnaWave при возобновлении', error=e)
|
||||
from app.services.remnawave_retry_queue import remnawave_retry_queue
|
||||
|
||||
if hasattr(subscription, 'id') and hasattr(subscription, 'user_id'):
|
||||
remnawave_retry_queue.enqueue(
|
||||
subscription_id=subscription.id,
|
||||
|
||||
Reference in New Issue
Block a user