Update documentation and clarify MVP status
- Revised the CLAUDE.md and README.md files to reflect the current MVP status, emphasizing completed features and intentionally omitted elements such as traffic limits and billing. - Enhanced clarity in the documentation regarding the architecture, tech stack, and user roles. - Removed the outdated roadmap section and streamlined references to tech stack decisions. - Updated API design documentation to clarify the absence of versioning in the MVP and the handling of configuration details.
This commit is contained in:
+8
-23
@@ -4,8 +4,7 @@
|
||||
`AppUser`/`AppRole` — часть Identity (живут в `Infrastructure`, т.к. расширяют `IdentityUser<Guid>`/
|
||||
`IdentityRole<Guid>`); чистый `PnvPanel.Domain` ссылается на пользователя/роль только по `Guid`.
|
||||
|
||||
Ниже — то, что реально реализовано и работает. Тарифы `Plan` и лимиты трафика на конфиг
|
||||
(`TrafficLimit`) были в первоначальном плане, но остались в backlog — квота в MVP только одна:
|
||||
Тарифы `Plan` и лимиты трафика на конфиг (`TrafficLimit`) не реализованы — единственная квота:
|
||||
число активных конфигов на роль (`AppRole.MaxConfigs`).
|
||||
|
||||
## Диаграмма связей
|
||||
@@ -84,7 +83,7 @@ ClientApp (каталог приложений-клиен
|
||||
| `DeviceLimit` | `int` | Лимит одновременных устройств/IP (0 = без лимита); задаёт юзер → `limitIp` в 3x-ui |
|
||||
| `UsedUpBytes` | `long` | Синхронизируется из 3x-ui (только для отображения — лимит трафика не применяется) |
|
||||
| `UsedDownBytes` | `long` | Синхронизируется из 3x-ui |
|
||||
| `ExpiresAt` | `DateTimeOffset?`| Зарезервировано на будущее — в MVP ничего его не выставляет, конфиг живёт бессрочно |
|
||||
| `ExpiresAt` | `DateTimeOffset?`| Зарезервировано, сейчас ничего его не выставляет — конфиг живёт бессрочно |
|
||||
| `Status` | `ConfigStatus` | `Active` / `Disabled` / `Expired` / `LimitReached` / `Revoked`|
|
||||
| `SubscriptionToken`| `string` | Секрет для публичного `/sub/{token}` |
|
||||
| `LastSyncAt` | `DateTimeOffset?`| |
|
||||
@@ -109,22 +108,9 @@ ClientApp (каталог приложений-клиен
|
||||
- Инбаунд должен быть доступен роли пользователя (`Inbound.AllowedRoles`).
|
||||
- Разрешено несколько конфигов в одном инбаунде (ограничение — только общая квота роли).
|
||||
|
||||
> **Не реализовано в MVP**: лимиты трафика и автоматическое истечение срока конфига. `ExpiresAt`
|
||||
> никогда не выставляется, `ConfigStatus.LimitReached` в значении enum есть, но код в него никогда
|
||||
> не переводит конфиг — оставлено на будущее (см. `Plan` ниже и Backlog в [vision.md](vision.md)).
|
||||
|
||||
### Plan — тариф (backlog, не реализовано)
|
||||
Планировался как шаблон лимитов трафика/срока для конфига — **квота на число конфигов уже
|
||||
реализована через `AppRole.MaxConfigs`, это не Plan**. Сущности `Plan` в коде нет; таблица ниже —
|
||||
эскиз на будущее, если/когда лимиты трафика/срока понадобятся.
|
||||
|
||||
| Поле | Тип | Заметки |
|
||||
| ------------------ | ----------- | ------------------------------ |
|
||||
| `Id` | `Guid` | PK |
|
||||
| `Name` | `string` | |
|
||||
| `TrafficLimitBytes`| `long` | 0 = безлимит |
|
||||
| `DurationDays` | `int?` | Срок действия конфига |
|
||||
| `IsActive` | `bool` | |
|
||||
> Лимиты трафика и автоматическое истечение срока конфига не реализованы. `ExpiresAt` никогда не
|
||||
> выставляется; `ConfigStatus.LimitReached` в значении enum есть, но код в него никогда не переводит
|
||||
> конфиг. Квота на число конфигов реализована через `AppRole.MaxConfigs` (см. [tech-stack.md](tech-stack.md)).
|
||||
|
||||
### TrafficSample — история трафика (для графиков)
|
||||
Точки потребления во времени; пишутся синхронизацией.
|
||||
@@ -137,8 +123,7 @@ ClientApp (каталог приложений-клиен
|
||||
| `UpBytes` | `long` | Накопительно или дельта |
|
||||
| `DownBytes` | `long` | |
|
||||
|
||||
> **Решение**: обычная таблица PostgreSQL + **TTL** — фоновая чистка записей старше N дней
|
||||
> (`TrafficRetentionService`). TimescaleDB/агрегация — вне MVP.
|
||||
> Обычная таблица PostgreSQL + **TTL** — фоновая чистка записей старше N дней (`TrafficRetentionService`).
|
||||
|
||||
### ClientApp — каталог приложений для подключения
|
||||
Приложения-клиенты, которые админ рекомендует пользователям. На странице инструкций отображаются
|
||||
@@ -284,8 +269,8 @@ enum OsPlatform { IOS, Android, Windows, MacOS, Linux }
|
||||
|
||||
## Уведомления и аудит (без диспетчера доменных событий)
|
||||
|
||||
В `Domain` нет маркера `IDomainEvent` и диспетчера событий — упрощение относительно исходного плана.
|
||||
CQRS-хендлеры сами вызывают порты `IRealtimeNotifier` / `ITelegramNotifier` и пишут `AuditLog`
|
||||
В `Domain` нет маркера `IDomainEvent` и диспетчера событий. CQRS-хендлеры сами вызывают порты
|
||||
`IRealtimeNotifier` / `ITelegramNotifier` и пишут `AuditLog`
|
||||
напрямую, после того как изменение состояния сохранено. Так проще проследить, что именно произойдёт
|
||||
при вызове конкретной команды — не нужно искать обработчик события где-то ещё.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user