Add IsAvailable property to Inbound and update related logic
- Introduced a new boolean property, `IsAvailable`, to the `Inbound` entity to track the availability status of inbounds based on synchronization results. - Updated the `SyncNodeCommandHandler` to mark inbounds as unavailable if they are not present in the latest synchronization but have existing configurations, preventing their deletion. - Enhanced the `MarkUnavailable` method to set both `IsAvailable` and `IsPublished` to false, reflecting the new status accurately. - Modified the frontend components to display the availability status of inbounds, ensuring users are informed of their current state. - Updated tests to cover the new behavior regarding inbound availability and its impact on revocation processes.
This commit is contained in:
@@ -64,6 +64,7 @@ AppUser
|
||||
| `Remark` | `string` | Метка из 3x-ui |
|
||||
| `Port` | `int` | |
|
||||
| `IsPublished` | `bool` | Доступен ли для самообслуживания пользователями |
|
||||
| `IsAvailable` | `bool` | Существует ли инбаунд на панели по последней синхронизации (см. ниже) |
|
||||
| `AllowedRoleIds` | `Guid[]` | Id ролей, которым разрешено создавать конфиги (native PostgreSQL `uuid[]`; не навигация на `AppRole` — тот в Infrastructure/Identity, Domain на него не ссылается) |
|
||||
| `DisplayName` | `string?` | Витринное имя для пользователя, напр. «Германия (Trojan)» |
|
||||
| `LastSyncAt` | `DateTimeOffset?` | |
|
||||
@@ -73,6 +74,14 @@ AppUser
|
||||
«Германия (Trojan)» → роли `user`, `vip`). Лимита числа клиентов на инбаунд нет — квота
|
||||
ограничивается только на уровне пользователя (`AppRole.MaxConfigs`).
|
||||
|
||||
**Синхронизация и пропажа инбаунда с панели** (`SyncNodeCommandHandler`, кнопка «Синхронизировать»):
|
||||
инбаунд, не пришедший в очередном ответе 3x-ui, считается пропавшим. Если по нему нет ни одного
|
||||
`VpnConfig` — запись просто удаляется (иначе при пересоздании того же инбаунда на панели под новым
|
||||
`RemoteInboundId` — 3x-ui не переиспользует id — накапливался бы визуальный дубль). Если конфиги
|
||||
есть — удалить нельзя (FK), инбаунд помечается `MarkUnavailable()` (`IsAvailable=false`,
|
||||
`IsPublished=false`): новые конфиги на нём не создать, а `Revoke` для существующих конфигов не бьёт
|
||||
в панель повторно (см. `RevokeVpnConfigCommandHandler`), а отзывает локально.
|
||||
|
||||
> `Node.Status` (health-check раз в 2 минуты, см. `NodeHealthCheckService`) — это диагностический
|
||||
> индикатор для админа, не гейт для создания конфига: он кэшированный и может ложно показывать
|
||||
> `Offline` из-за временного сбоя пробника. Реальную недоступность ноды ловит вызов
|
||||
|
||||
Reference in New Issue
Block a user