Add load balancer marker for inbound country flag
CI / Backend (build + test) (push) Failing after 1m26s
CI / Frontend (lint + typecheck + build) (push) Successful in 33s

Reserved CountryCode "XX" (Inbound.BalancerCountryCode) marks an inbound
behind a load balancer whose exit country is unknown: the site shows a
Shuffle icon with a tooltip instead of a flag, the bot shows 🔀. Admin can
pick it in the publish dialog. Fits the existing column, no migration.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nidandClaude Opus 5.5 committed 2026-10-17 01:57:30 +03:00
1 parent 81562b5c56
commit e979adca57
9 files changed
+48 -6

No files matched your search

+1 -1
View File
@@ -83,7 +83,7 @@ AppUser
| `IsAvailable` | `bool` | Существует ли инбаунд на панели по последней синхронизации (см. ниже) |
| `AllowedRoleIds` | `Guid[]` | Id ролей, которым разрешено создавать конфиги (native PostgreSQL `uuid[]`; не навигация на `AppRole` — тот в Infrastructure/Identity, Domain на него не ссылается) |
| `DisplayName` | `string?` | Витринное имя для пользователя, напр. «Германия (Trojan)» |
| `CountryCode` | `string?` | ISO 3166-1 alpha-2 (`DE`) — флаг перед именем у пользователя; задаётся при публикации, только отображение |
| `CountryCode` | `string?` | ISO 3166-1 alpha-2 (`DE`) — флаг перед именем у пользователя; задаётся при публикации, только отображение. Зарезервированный `XX` (`Inbound.BalancerCountryCode`) — инбаунд за балансировщиком, страна выхода неизвестна: вместо флага значок балансира (на сайте — иконка `Shuffle` с подсказкой, в боте — 🔀) |
| `LastSyncAt` | `DateTimeOffset?` | |
Инварианты: конфиг можно создать только если `IsPublished && Node.IsEnabled`, и **роль пользователя
+2 -1
View File
@@ -91,7 +91,8 @@ frontend/
неактивированного — `ActivationGate` вместо дашборда.
- **Создание конфига**: диалог — выбор инбаунда (по `displayName`, с флагом страны) + метка. Флаги —
SVG из `country-flag-icons` (курируемый список в `shared/lib/countries.ts`; emoji-флаги Windows не рисует),
в Telegram-боте — emoji. У каждой локации — загрузка её ноды: «светофор» + % от `Node.Capacity`
в Telegram-боте — emoji. Код `XX` (`BALANCER_COUNTRY_CODE`) — инбаунд за балансировщиком: вместо флага
иконка `Shuffle` с подсказкой «страна выхода может меняться» (в боте — 🔀). У каждой локации — загрузка её ноды: «светофор» + % от `Node.Capacity`
(<50 / <80 / ≥80), либо число конфигов на сервере, если ёмкость не задана; порядок — с сервера,
от менее загруженных. Лимит одновременных IP
(`limitIp` в 3x-ui) выставляется автоматически по квоте роли пользователя (`AppRole.MaxIpLimit`) —