Leonid Pershin f14daa3df1
CI / Backend (build + test) (push) Successful in 1m20s
CI / Frontend (lint + typecheck + build) (push) Successful in 34s
Add role management validation to prevent removal of the last admin
- Introduced a new error, `CannotRemoveLastAdmin`, to handle attempts to downgrade the last admin user in the system.
- Updated `RoleService` to check the number of admin users before allowing a role change that would remove the last admin.
- Enhanced unit tests to verify the new behavior, ensuring that attempts to downgrade the last admin correctly propagate the failure.
- Updated API documentation to reflect the new validation logic and its implications for role management.
2026-07-14 23:53:20 +03:00
2026-07-01 12:55:52 +00:00

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.

Лицензия

MIT

S
Description
No description provided
Readme MIT
1.9 MiB
Languages
C# 69.5%
TypeScript 30.1%
Dockerfile 0.2%