fix: cabinet purchase fails after panel user deletion — stale UUID
Two bugs caused "RemnaWave UUID не найден" when a user repurchased after their panel user was deleted (expired user cleanup): 1. Webhook handler only cleared subscription.remnawave_uuid in multi-tariff mode. In single-tariff mode the stale UUID remained, causing the cabinet to try update_remnawave_user on a deleted panel user instead of creating a new one. 2. Cabinet purchase-tariff used subscription.remnawave_uuid for the create/update decision. In single-tariff mode this was stale. Now mirrors the bot handler logic: checks user.remnawave_uuid in single-tariff mode (correctly cleared by webhook).
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user