10 KiB
10 KiB
Roadmap
Порядок реализации по этапам (milestones). Каждый этап — работоспособный инкремент.
M0 — Каркас и инфраструктура
- Solution + 4 проекта (Domain/Application/Infrastructure/Api), ссылки по Clean Architecture.
Directory.Build.props,.editorconfig, nullable + анализаторы,dotnet formatв CI.- EF Core + Npgsql, первая миграция.
- Scaffolding фронта: Vite + React + TS + Tailwind + shadcn/ui + TanStack Query/Router; тема light/dark/system (провайдер + переключатель); i18n (RU/EN); dev-прокси
/api,/hubsна бэк. - Единый контейнер: multi-stage Dockerfile (node → dotnet publish → aspnet), Api раздаёт SPA из
wwwroot(fallback наindex.html); docker-composeapp+db(PostgreSQL);ForwardedHeaders(TLS — внешним прокси); авто-применение миграций на старте. - Health-check
/health, Serilog, OpenAPI + Scalar. - CI (GitHub Actions):
dotnet build/test+pnpm build/lint/typecheck(без деплоя). - Готово, когда: единый образ поднимается в docker-compose рядом с postgres, отдаёт заглушку SPA и
/health, есть базовая миграция, CI зелёный.
M1 — Аутентификация и сидинг
- ASP.NET Core Identity (
AppUser/AppRolecMaxConfigs);DbInitializer: системные ролиadmin/userи учётка админа + Telegram id админов из env (.env.example). - Вход по username (email не используется); JWT access + refresh (httpOnly cookie, ротация, хранение
хэшей), CSRF на refresh, Identity lockout, rate-limit на
/auth/*; смена пароля. - Регистрация: новый пользователь → роль
user,IsActivated = false. - Фронт: страницы login/register (username), стор авторизации, refresh-flow, guard-маршруты.
- Готово, когда: регистрация/вход/refresh/logout по username работают, админ засидан, новый юзер неактивен.
M2 — Роли и активация
- Домен: динамические роли (CRUD
admin, квотаMaxConfigs),ActivationRequest. - Команды/запросы: CreateRole/UpdateRole/DeleteRole, ChangeUserRole (одна роль), RequestActivation (с комментарием), ApproveActivation/RejectActivation.
- Эндпоинты активации (user + admin) и ролей; policy
RequireActivated. - Фронт: экран «запросить активацию» (с комментарием), админ-очередь запросов, управление ролями/назначением.
- Готово, когда: юзер запрашивает активацию с комментарием, админ на сайте активирует; роли с квотами работают.
M3 — Ноды и публикация inbounds (по ролям)
- Домен
Node/Inbound(+AllowedRoles,DisplayName); портIXuiPanelGateway+XuiPanelGateway(per-node клиент, ThreeXui.Net); шифрование секретов нод (ISecretProtector). - Команды/запросы: RegisterNode, SyncNode, Probe, ListNodes, ListInbounds, PublishInbound (с выбором ролей).
- Админка нод/инбаундов на фронте (публикация с
displayNameиallowedRoleIds). - Готово, когда: админ подключает реальную 3x-ui и публикует inbound «Германия (Trojan)» для выбранных ролей.
M4 — Конфиги пользователя (ядро продукта)
- Домен
VpnConfig(создание, отзыв, ротация, статусы; инварианты: активирован + квота роли (грандфазеринг)- доступ роли к инбаунду; проверка квоты в транзакции; схема
ClientEmail).
- доступ роли к инбаунду; проверка квоты в транзакции; схема
- CreateVpnConfig (с
label/deviceLimit→limitIp), EditVpnConfig, RotateVpnConfig, RevokeVpnConfig, GetMyConfigs, GetConfigLink, ListAvailableInbounds; connection string + QR. - Подписка: агрегированная
/sub/{userToken}(все конфиги) + по конфигу/sub/{configToken}; заголовкиSubscription-Userinfo/profile-update-interval. - Самоудаление аккаунта (
DELETE /api/auth/me): отзыв всех конфигов + удаление данных. - Каталог приложений
ClientApp(домен +GET /api/appsпо ОС; сид изseed/client-apps.json) + страница инструкций на фронте. - Фронт: дашборд (метки, лимит устройств), создание/редактирование, страница инструкций, копирование, QR, отзыв, перевыпуск, настройки аккаунта.
- Готово, когда: активированный юзер создаёт рабочий конфиг в доступном инбаунде в пределах квоты; работает агрегированная подписка.
M5 — Синхронизация трафика и realtime
TrafficSyncService(обход нод, обновление трафика/статусов,TrafficSample); реконсиляция дрейфа с 3x-ui.NodeHealthCheckService;TrafficRetentionService(TTL-чистка истории).- SignalR
PanelHub+IRealtimeNotifier; события трафика/статусов/нод/активации. - Фронт: живые прогресс-бары трафика, статусы онлайн, реакция на превышение лимита/срока.
- Готово, когда: трафик и статусы обновляются в UI без перезагрузки.
M6 — Админ-статистика, управление пользователями, аудит
- ListUsers, BlockUser (→ отключение конфигов в 3x-ui) / UnblockUser, ChangeUserRole, ResetUserPassword (без привязки TG), GetUserConfigs, force-revoke, GetStats.
AuditLog: запись значимых действий (Web/Telegram/System) + эндпоинт/api/admin/audit.- Каталог приложений: админ-CRUD
ClientApp(/api/admin/apps) — название, ссылка, ОС, порядок, вкл/выкл. - Фронт: таблицы пользователей/конфигов/ролей, журнал аудита, графики трафика (Recharts), сводки.
- Готово, когда: админ видит статистику и журнал, управляет пользователями/ролями/конфигами; блокировка гасит VPN.
M7 — Telegram-бот
- Библиотека Telegram.Bot,
TelegramBotHostedService(long polling) в процессе Api,IOptions<TelegramOptions>. - Домен: поля Telegram у
AppUser,TelegramLinkToken,TelegramLoginRequest. - Флоу привязки (
LinkTelegramCommand) + эндпоинтlink-token/unlink. - Passwordless-вход:
login-request+ подтверждение в боте (ApproveTelegramLoginCommand) → выпуск JWT; поллинг/SignalR-завершение на фронте. - Восстановление пароля через бота (
/resetpassword→ одноразовая ссылка на смену пароля). - Команды бота:
/start, меню, «Мои конфиги» (GetMyConfigsQuery), «Открыть сайт»,/login,/unlink,/help; QR в боте. - Админ в боте: уведомления о запросах активации + inline «Активировать/Отклонить»,
/requests(по Telegram id из env). - DM-уведомления юзеру: активация, отзыв конфига админом, блокировка (если Telegram привязан). Бот — read-only по конфигам.
- Фронт: кнопки «Войти через Telegram» и «Привязать Telegram» (deep-link/QR + ожидание подтверждения).
- Готово, когда: юзер привязывает Telegram, входит без пароля, видит конфиги; админ активирует запросы прямо в боте.
M8 — Закалка (hardening)
- Полный набор тестов (Domain/Application/Integration с Testcontainers).
- Rate-limiting, аудит-лог действий, единообразные ProblemDetails, ретеншн
TrafficSample. - Прод-конфиг docker-compose (secrets, том для key-ring Data Protection, healthchecks); TLS — внешним прокси.
- Готово, когда: зелёный CI, покрытие ключевых сценариев, готовность к деплою.
Backlog (после MVP)
- Полное самообслуживание в боте (создание/ротация/отзыв конфигов) — в MVP бот read-only.
- Полная регистрация аккаунта через Telegram (в MVP — только привязка); Telegram Login Widget как альтернатива.
- Тарифы/биллинг/платежи, автопродление, промокоды.
- Реферальная программа; расширенные уведомления (через Telegram/веб — email в проекте не используется).
- Балансировка/выбор оптимальной ноды, автоскейл.
- OpenTelemetry-трейсинг, метрики, дашборды.
- Вынос фоновых задач в Hangfire/Quartz; TimescaleDB для истории трафика.
- Мультиязычность (RU/EN и далее).