mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-03-30 01:07:17 +00:00
fix: не пересылать activeInternalSquads в рутинных обновлениях RemnaWave (A039)
Стейловые UUID сквадов в connected_squads вызывали FK violation в RemnaWave → A039. - update_remnawave_user: добавлен параметр sync_squads (default=False) - Сквады шлются только при явном sync_squads=True (promo_offer, countries) - monitoring_service: убрана пересылка сквадов в рутинном sync - Расширен лог PATCH payload для диагностики
This commit is contained in:
@@ -398,7 +398,7 @@ async def apply_countries_changes(callback: types.CallbackQuery, db_user: User,
|
||||
await db.commit()
|
||||
|
||||
subscription_service = SubscriptionService()
|
||||
await subscription_service.update_remnawave_user(db, subscription)
|
||||
await subscription_service.update_remnawave_user(db, subscription, sync_squads=True)
|
||||
|
||||
await db.refresh(subscription)
|
||||
|
||||
@@ -906,7 +906,7 @@ async def confirm_add_countries_to_subscription(
|
||||
await db.commit()
|
||||
|
||||
subscription_service = SubscriptionService()
|
||||
await subscription_service.update_remnawave_user(db, subscription)
|
||||
await subscription_service.update_remnawave_user(db, subscription, sync_squads=True)
|
||||
|
||||
await db.refresh(db_user)
|
||||
await db.refresh(subscription)
|
||||
|
||||
@@ -384,9 +384,11 @@ class MonitoringService:
|
||||
description=settings.format_remnawave_user_description(
|
||||
full_name=user.full_name, username=user.username, telegram_id=user.telegram_id
|
||||
),
|
||||
active_internal_squads=subscription.connected_squads,
|
||||
)
|
||||
|
||||
# Не пересылаем activeInternalSquads в рутинном sync — сквады уже назначены
|
||||
# при создании подписки, пересылка стейловых UUID вызывает FK violation → A039
|
||||
|
||||
if hwid_limit is not None:
|
||||
update_kwargs['hwid_device_limit'] = hwid_limit
|
||||
|
||||
|
||||
@@ -115,6 +115,7 @@ class PromoOfferService:
|
||||
remnawave_user = await self.subscription_service.update_remnawave_user(
|
||||
db,
|
||||
subscription,
|
||||
sync_squads=True,
|
||||
)
|
||||
if remnawave_user is None:
|
||||
await db.rollback()
|
||||
@@ -188,7 +189,7 @@ class PromoOfferService:
|
||||
subscription.connected_squads = list(updated)
|
||||
subscription.updated_at = now
|
||||
try:
|
||||
await self.subscription_service.update_remnawave_user(db, subscription)
|
||||
await self.subscription_service.update_remnawave_user(db, subscription, sync_squads=True)
|
||||
except Exception as exc: # pragma: no cover - defensive logging
|
||||
logger.error(
|
||||
'Ошибка обновления Remnawave при отзыве тестового доступа подписки',
|
||||
|
||||
@@ -330,6 +330,7 @@ class SubscriptionService:
|
||||
*,
|
||||
reset_traffic: bool = False,
|
||||
reset_reason: str | None = None,
|
||||
sync_squads: bool = False,
|
||||
) -> RemnaWaveUser | None:
|
||||
try:
|
||||
user = await get_user_by_id(db, subscription.user_id)
|
||||
@@ -384,7 +385,10 @@ class SubscriptionService:
|
||||
),
|
||||
)
|
||||
|
||||
if subscription.connected_squads:
|
||||
# Сквады отправляем только при явном sync_squads=True (propagate_squads и пр.)
|
||||
# В рутинных обновлениях пропускаем — сквады уже назначены при создании подписки,
|
||||
# а пересылка стейловых UUID вызывает FK violation → A039 в RemnaWave
|
||||
if sync_squads and subscription.connected_squads:
|
||||
update_kwargs['active_internal_squads'] = subscription.connected_squads
|
||||
|
||||
if user_tag is not None:
|
||||
|
||||
Reference in New Issue
Block a user