Архитектура и разработка
Проект — Rust workspace и PostgreSQL. Панель написана на JavaScript/HTML/CSS без frontend-сборщика. Клиентские ресурсы встраиваются в sn-cabinet при компиляции; изменение web/app требует пересборки шлюза для установленного кабинета.
| Каталог | Назначение |
|---|---|
| crates/core | База, авторизация, общие правила и проверка конфигураций |
| crates/api | API панели, sn-admin и шлюз sn-cabinet |
| crates/sub | Форматы подписки и страница подключения |
| crates/payments | Провайдеры, счета, начисления и докупки |
| crates/bot | Telegram-бот |
| crates/node | Агент сервера и Xray |
| crates/worker | Фоновые задачи, рассылки и уведомления |
| web | Панель и клиентские интерфейсы |
| db/migrations | Упорядоченные миграции PostgreSQL |
Локальная работа
Используйте отдельную базу и окружение по .env.example. Примените bash deploy/migrate.sh с настроенным DATABASE_URL. Не используйте seed на рабочем сервере. Соберите cargo build --locked --workspace. Учётную запись владельца создавайте утилитой sn-admin со скрытым stdin, а не паролем в аргументах.
make test-release
cargo test --locked --workspace --lib --bins
cargo build --release --locked --workspace
Интеграционные проверки с базой и Telegram-моками имеют отдельные переменные и ограничения тестовой БД. Не запускайте их против рабочей базы. Для Linux-релиза используйте штатную сборку, которая проверяет ELF/архитектуру и манифест.
Платёжный модуль
Типовой HTTP-провайдер настраивается в панели, если соответствует поддержанному контракту. Нестандартная подпись или многоэтапный протокол требуют Rust-модуля и пересборки. Реализуйте контракт реестра провайдеров; проверяйте подпись исходного тела, внешний ID, сумму и валюту. Начисление и отметка оплаты должны быть идемпотентны и транзакционны. См. интерфейс платежей.
Изменения и переводы
Добавляйте миграции новым номером, не переписывайте уже выпущенные. При UI-изменении обновляйте RU/EN строки, подсказки и руководство соответствующего раздела. Проверяйте мобильный и широкий экран, светлую и тёмную темы. Планы развития не описывайте как готовые функции.
Правила участия — CONTRIBUTING.ru.md.