- Updated `ListUsersQueryHandler` to include plan names and config quotas in `UserSummaryDto`, enriching user data retrieval. - Implemented `WithPlanNamesAsync` method to fetch plan names based on user plan IDs, improving user experience in the admin interface. - Enhanced `Node` class with a `ConsecutiveProbeFailures` property for better status management during health checks. - Modified `NodeHealthCheckService` to utilize the new `RecordProbe` method, implementing a hysteresis mechanism for node status changes. - Updated frontend components to display user config quotas and plan names, improving clarity in user management. - Enhanced tests for user listing and node status handling to ensure robust functionality and coverage. - Updated documentation to reflect changes in user and node management features.
PnvPanel
PnvPanel — self-service портал для VPN-конфигураций. Пользователи самостоятельно создают и управляют своими VPN-конфигами (VLESS / VMess / Trojan / Shadowsocks), а администраторы управляют серверами, лимитами и пользователями. Есть Telegram-бот (ссылка на сайт, просмотр конфигов, passwordless-вход через привязку Telegram). Под капотом — интеграция с панелями 3x-ui через библиотеку ThreeXui.Net. Приложение (фронт + бек + бот) поставляется единым Docker-образом; PostgreSQL — отдельным контейнером в compose.
Стек
| Слой | Технологии |
|---|---|
| Backend | C# / .NET 10, ASP.NET Core Web API, Clean Architecture, CQRS (свой диспетчер), EF Core |
| БД | PostgreSQL (Npgsql) |
| Auth | ASP.NET Core Identity + JWT (access + refresh) |
| Realtime | SignalR |
| Интеграция | ThreeXui.Net (3x-ui REST API) |
| Telegram | Telegram.Bot (in-process hosted service, long polling) |
| Frontend | React 19 + Vite + TypeScript, TanStack Query/Router, shadcn/ui + Tailwind |
| Упаковка | Единый Docker-образ (API + бот + статика SPA) + PostgreSQL в docker-compose |
Быстрый старт
Единый Docker-образ (API + бот + статика SPA) + PostgreSQL:
cp .env.example .env # заполнить AdminSeed__Password, Jwt__SigningKey и т.д.
docker compose up -d --build
# → http://localhost:8080 (админ — логин/пароль из .env, AdminSeed__Username/Password)
Локальная разработка (без Docker для приложения — только db):
# backend, из backend/
dotnet build && dotnet test
dotnet run --project src/PnvPanel.Api
# frontend, из frontend/
pnpm install
pnpm dev # проксирует /api, /hubs на localhost:8080
Документация
Проектная документация лежит в docs/:
- Product Vision & Scope — что мы строим и для кого
- Architecture — Clean Architecture, CQRS, интеграция, realtime, безопасность
- Domain Model — сущности, связи, инварианты
- Tech Stack — используемые технологии
- Backend Conventions — структура проекта, паттерны, стиль кода
- Frontend — стек фронтенда и структура
- Telegram Bot — бот, привязка Telegram и passwordless-вход
- API Design — REST-эндпоинты и SignalR-контракты
Пример переменных окружения (сид админа, БД, JWT, Telegram) — .env.example.
Инструкции для AI-ассистента (Claude Code) — в CLAUDE.md.