diff --git a/app/cabinet/routes/subscription_modules/purchase.py b/app/cabinet/routes/subscription_modules/purchase.py index 1c56429d..d122af1c 100644 --- a/app/cabinet/routes/subscription_modules/purchase.py +++ b/app/cabinet/routes/subscription_modules/purchase.py @@ -895,8 +895,14 @@ async def purchase_tariff( except Exception as trial_err: logger.warning('Failed to disable trial on RemnaWave', error=trial_err, trial_id=trial_sub.id) try: - if subscription.remnawave_uuid: - # Existing subscription with Remnawave user — update it + # Mirror the bot handler logic: in single-tariff mode, check user.remnawave_uuid + # (webhook clears it on panel deletion), not subscription.remnawave_uuid + if settings.is_multi_tariff_enabled(): + _should_create = not subscription.remnawave_uuid + else: + _should_create = not getattr(user, 'remnawave_uuid', None) + + if not _should_create: await service.update_remnawave_user( db, subscription, @@ -905,7 +911,6 @@ async def purchase_tariff( sync_squads=True, ) else: - # New subscription — create new Remnawave user await service.create_remnawave_user( db, subscription, diff --git a/app/services/remnawave_webhook_service.py b/app/services/remnawave_webhook_service.py index b3d62835..9f9530b6 100644 --- a/app/services/remnawave_webhook_service.py +++ b/app/services/remnawave_webhook_service.py @@ -1075,8 +1075,8 @@ class RemnaWaveWebhookService: subscription.connected_squads = [] subscription.updated_at = datetime.now(UTC) - if settings.is_multi_tariff_enabled(): - subscription.remnawave_uuid = None + # Always clear stale UUID — panel user was deleted + subscription.remnawave_uuid = None await db.execute(delete(SubscriptionServer).where(SubscriptionServer.subscription_id == sub_id))