diff --git a/app/cabinet/routes/subscription.py b/app/cabinet/routes/subscription.py index 112ce8e4..0f2fbe0c 100644 --- a/app/cabinet/routes/subscription.py +++ b/app/cabinet/routes/subscription.py @@ -3778,12 +3778,25 @@ async def switch_tariff( except Exception as e: logger.error(f'Failed to sync tariff switch with RemnaWave: {e}') + # Reset all devices on tariff switch + devices_reset = False + if user.remnawave_uuid: + try: + service = RemnaWaveService() + async with service.get_api_client() as api: + await api.reset_user_devices(user.remnawave_uuid) + devices_reset = True + logger.info(f'Reset all devices for user {user.id} on tariff switch') + except Exception as e: + logger.error(f'Failed to reset devices on tariff switch: {e}') + await db.refresh(user) await db.refresh(user.subscription) return { 'success': True, - 'message': f"Switched from '{old_tariff_name}' to '{new_tariff.name}'", + 'message': f"Switched from '{old_tariff_name}' to '{new_tariff.name}'" + + (' (devices reset)' if devices_reset else ''), 'subscription': _subscription_to_response(user.subscription), 'old_tariff_name': old_tariff_name, 'new_tariff_id': new_tariff.id, diff --git a/app/handlers/subscription/tariff_purchase.py b/app/handlers/subscription/tariff_purchase.py index 8b5e72c6..0e7f0afe 100644 --- a/app/handlers/subscription/tariff_purchase.py +++ b/app/handlers/subscription/tariff_purchase.py @@ -2242,6 +2242,19 @@ async def confirm_tariff_switch( except Exception as e: logger.error(f'Ошибка обновления Remnawave при переключении тарифа: {e}') + # Гарантированный сброс устройств при смене тарифа + await db.refresh(db_user) + if db_user.remnawave_uuid: + try: + from app.services.remnawave_service import RemnaWaveService + + service = RemnaWaveService() + async with service.get_api_client() as api: + await api.reset_user_devices(db_user.remnawave_uuid) + logger.info(f'🔧 Сброшены устройства при смене тарифа для user_id={db_user.id}') + except Exception as e: + logger.error(f'Ошибка сброса устройств при смене тарифа: {e}') + # Создаем транзакцию await create_transaction( db, @@ -2395,7 +2408,7 @@ async def confirm_daily_tariff_switch( await db.commit() await db.refresh(subscription) - # Обновляем пользователя в Remnawave + # Обновляем пользователя в Remnawave (create_remnawave_user также сбрасывает устройства) try: subscription_service = SubscriptionService() await subscription_service.create_remnawave_user( @@ -2407,6 +2420,19 @@ async def confirm_daily_tariff_switch( except Exception as e: logger.error(f'Ошибка обновления Remnawave: {e}') + # Гарантированный сброс устройств при смене тарифа + await db.refresh(db_user) + if db_user.remnawave_uuid: + try: + from app.services.remnawave_service import RemnaWaveService + + service = RemnaWaveService() + async with service.get_api_client() as api: + await api.reset_user_devices(db_user.remnawave_uuid) + logger.info(f'🔧 Сброшены устройства при смене на суточный тариф для user_id={db_user.id}') + except Exception as e: + logger.error(f'Ошибка сброса устройств при смене тарифа: {e}') + # Создаем транзакцию await create_transaction( db, @@ -2972,6 +2998,19 @@ async def confirm_instant_switch( except Exception as e: logger.error(f'Ошибка обновления Remnawave при мгновенном переключении: {e}') + # Гарантированный сброс устройств при смене тарифа + await db.refresh(db_user) + if db_user.remnawave_uuid: + try: + from app.services.remnawave_service import RemnaWaveService + + service = RemnaWaveService() + async with service.get_api_client() as api: + await api.reset_user_devices(db_user.remnawave_uuid) + logger.info(f'🔧 Сброшены устройства при мгновенном переключении тарифа для user_id={db_user.id}') + except Exception as e: + logger.error(f'Ошибка сброса устройств при переключении тарифа: {e}') + # Создаем транзакцию если была оплата if is_upgrade and upgrade_cost > 0: await create_transaction(