Leonid Pershin 0dcaf1203f
CI / Backend (build + test) (push) Successful in 1m20s
CI / Frontend (lint + typecheck + build) (push) Successful in 32s
Implement discount tiers for pricing settings and enhance related functionalities
- Introduced a new `DiscountTierDto` to represent volume discount tiers, allowing roles with a config quota at or above specified thresholds to receive discounts on pricing.
- Updated the `PricingSettingsDto` to include a list of discount tiers, enhancing the pricing model to support more flexible pricing strategies.
- Modified the `GetPricingSettingsQueryHandler` and `UpdatePricingSettingsCommandHandler` to handle discount tiers, ensuring they are correctly retrieved and updated in the database.
- Enhanced validation in `UpdatePricingSettingsCommandValidator` to enforce uniqueness and progressive discount tiers, preventing invalid configurations.
- Updated frontend components to support the new discount tier functionality, including forms for adding and managing discount tiers in the admin interface.
- Revised API documentation to reflect the new discount tier features and their usage in pricing settings.
2026-07-19 15:51:01 +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%