fix: tune tariffs folder
This commit is contained in:
+1
-1
@@ -146,7 +146,7 @@ STARS_PRICE_12_MONTHS=0
|
||||
# Traffic Packages (enables traffic sale mode when set)
|
||||
TRAFFIC_PACKAGES=10:199,50:799 # Format: "<GB>:<price>", comma-separated
|
||||
STARS_TRAFFIC_PACKAGES=10:2500 # Optional: traffic packages priced in Stars
|
||||
TARIFFS_CONFIG_PATH=config/tariffs.json # Optional Tariffs 2.0 JSON config. If missing, legacy .env pricing is used.
|
||||
TARIFFS_CONFIG_PATH=data/tariffs.json # Optional Tariffs 2.0 JSON config. If missing, legacy .env pricing is used.
|
||||
TARIFF_TRAFFIC_WARNING_LEVELS=85,90,95 # Tariffs 2.0 traffic warning levels, percent used
|
||||
|
||||
# Subscription Notifications
|
||||
|
||||
+1
-1
@@ -30,5 +30,5 @@ __pycache__/
|
||||
locales/ru_backup.json
|
||||
locales/en_backup.json
|
||||
db/models_old.py
|
||||
config/tariffs.json
|
||||
data/tariffs.json
|
||||
docker-compose-dev.yml
|
||||
|
||||
@@ -61,7 +61,7 @@ docker compose logs -f remnawave-minishop
|
||||
- настройки платежного провайдера;
|
||||
- `SUBSCRIPTION_MINI_APP_URL`, если используется Web App.
|
||||
|
||||
Для каталога тарифов используется `TARIFFS_CONFIG_PATH` со значением по умолчанию `config/tariffs.json`. Пример формата лежит в [config/tariffs.example.json](config/tariffs.example.json), подробности - в [docs/tariffs.md](docs/tariffs.md).
|
||||
Для каталога тарифов используется `TARIFFS_CONFIG_PATH` со значением по умолчанию `data/tariffs.json`. Пример формата лежит в [data/tariffs.example.json](data/tariffs.example.json), подробности - в [docs/tariffs.md](docs/tariffs.md).
|
||||
|
||||
## Полезные команды
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<header class="admin-card-head">
|
||||
<div>
|
||||
<h3>{at("tariffs_title", {}, "Каталог тарифов")}</h3>
|
||||
<small>{tariffsPath || "config/tariffs.json"}</small>
|
||||
<small>{tariffsPath || "data/tariffs.json"}</small>
|
||||
</div>
|
||||
<div class="admin-editor-section-actions">
|
||||
<button type="button" class="admin-btn admin-btn-sm" on:click={tariffsStore.loadTariffs} disabled={tariffsLoading || tariffsSaving}>
|
||||
|
||||
@@ -93,7 +93,7 @@ export async function mockApi(path, options = {}, context = {}) {
|
||||
if (path === "/admin/tariffs") {
|
||||
return {
|
||||
ok: true,
|
||||
path: "config/tariffs.json",
|
||||
path: "data/tariffs.json",
|
||||
catalog: {
|
||||
default_tariff: "standard",
|
||||
topup_packages_default: { rub: [{ gb: 10, price: 99 }], stars: [] },
|
||||
|
||||
+1
-1
@@ -261,7 +261,7 @@ class Settings(BaseSettings):
|
||||
default=None,
|
||||
description="Comma-separated list of traffic packages priced in Stars, e.g. '5:500,20:1500'",
|
||||
)
|
||||
TARIFFS_CONFIG_PATH: str = Field(default="config/tariffs.json")
|
||||
TARIFFS_CONFIG_PATH: str = Field(default="data/tariffs.json")
|
||||
TARIFF_TRAFFIC_WARNING_LEVELS: str = Field(
|
||||
default="85,90,95",
|
||||
description="Comma-separated traffic usage warning levels for tariff traffic limits, e.g. '85,90,95'",
|
||||
|
||||
@@ -9,10 +9,9 @@ services:
|
||||
- TZ=UTC
|
||||
volumes:
|
||||
- ./locales:/app/locales
|
||||
# Optional Tariffs 2.0 config. Put tariffs.json near this compose file,
|
||||
# then uncomment the mount below. If no JSON is mounted, legacy .env
|
||||
# pricing is used.
|
||||
# - ./tariffs.json:/app/config/tariffs.json:ro
|
||||
# Tariffs 2.0 configuration. Mount the data directory to persist
|
||||
# changes made via the admin panel.
|
||||
# - ./data:/app/data
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
remnawave-minishop-db:
|
||||
|
||||
@@ -14,10 +14,9 @@ services:
|
||||
- TZ=UTC
|
||||
volumes:
|
||||
- ./locales:/app/locales
|
||||
# Optional Tariffs 2.0 config. Put tariffs.json near this compose file,
|
||||
# then uncomment the mount below. If no JSON is mounted, legacy .env
|
||||
# pricing is used.
|
||||
# - ./tariffs.json:/app/config/tariffs.json:ro
|
||||
# Tariffs 2.0 configuration. Mount the data directory to persist
|
||||
# changes made via the admin panel.
|
||||
# - ./data:/app/data
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- remnawave-minishop-db
|
||||
|
||||
+3
-4
@@ -14,11 +14,10 @@ services:
|
||||
ports:
|
||||
- 127.0.0.1:8080:8080
|
||||
- 127.0.0.1:${WEBAPP_SERVER_PORT:-8081}:${WEBAPP_SERVER_PORT:-8081}
|
||||
# Optional Tariffs 2.0 config. Put tariffs.json near this compose file,
|
||||
# then uncomment the mount below. If no JSON is mounted, legacy .env
|
||||
# pricing is used.
|
||||
# Tariffs 2.0 configuration. Mount the data directory to persist
|
||||
# changes made via the admin panel.
|
||||
# volumes:
|
||||
# - ./tariffs.json:/app/config/tariffs.json:ro
|
||||
# - ./data:/app/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:8080/healthz >/dev/null || exit 1"]
|
||||
interval: 30s
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@
|
||||
|
||||
## Тарифы
|
||||
|
||||
Раздел **Система -> Тарифы** работает с файлом `TARIFFS_CONFIG_PATH` (по умолчанию `config/tariffs.json`). При сохранении backend валидирует payload через `TariffsConfig`, пишет JSON в UTF-8 и сбрасывает кеш публичных данных Web App.
|
||||
Раздел **Система -> Тарифы** работает с файлом `TARIFFS_CONFIG_PATH` (по умолчанию `data/tariffs.json`). При сохранении backend валидирует payload через `TariffsConfig`, пишет JSON в UTF-8 и сбрасывает кеш публичных данных Web App.
|
||||
|
||||
Если файла еще нет, админка открывает пустой каталог. Перед сохранением должен быть хотя бы один включенный тариф, а `default_tariff` должен ссылаться на включенный тариф.
|
||||
|
||||
@@ -50,4 +50,4 @@
|
||||
|
||||
Отключенный тариф исчезает с витрины, но активные подписки с его `tariff_key` продолжают существовать. Удаление тарифа безопасно только если не осталось активных подписок, которым нужна докупка, продление или смена с этого тарифа.
|
||||
|
||||
Для Docker важно, чтобы путь `TARIFFS_CONFIG_PATH` был доступен на запись контейнеру. В dev-compose каталог `./config` монтируется в `/app/config`, поэтому админка может сохранять `config/tariffs.json`.
|
||||
Для Docker важно, чтобы путь `TARIFFS_CONFIG_PATH` был доступен на запись контейнеру. В dev-compose каталог `./data` монтируется в `/app/data`, поэтому админка может сохранять `data/tariffs.json`.
|
||||
|
||||
@@ -69,7 +69,7 @@ nano .env
|
||||
|
||||
| Переменная | Назначение |
|
||||
| --- | --- |
|
||||
| `TARIFFS_CONFIG_PATH` | Путь к JSON-каталогу тарифов. По умолчанию `config/tariffs.json`. |
|
||||
| `TARIFFS_CONFIG_PATH` | Путь к JSON-каталогу тарифов. По умолчанию `data/tariffs.json`. |
|
||||
| `TARIFF_TRAFFIC_WARNING_LEVELS` | Проценты предупреждений по трафику, например `85,90,95`. |
|
||||
| `RUB_PRICE_1_MONTH`, `RUB_PRICE_3_MONTHS`, `RUB_PRICE_6_MONTHS`, `RUB_PRICE_12_MONTHS` | Цены подписок в рублях для режима без JSON-каталога. |
|
||||
| `STARS_PRICE_1_MONTH`, `STARS_PRICE_3_MONTHS`, `STARS_PRICE_6_MONTHS`, `STARS_PRICE_12_MONTHS` | Цены подписок в Telegram Stars для режима без JSON-каталога. |
|
||||
@@ -79,7 +79,7 @@ nano .env
|
||||
|
||||
Если файл из `TARIFFS_CONFIG_PATH` существует, бот использует каталог тарифов. Если файла нет, применяется конфигурация из переменных `.env`.
|
||||
|
||||
В `docker-compose-dev.yml` каталог `./config` монтируется в контейнер как `/app/config`, чтобы Web App админка могла сохранять `config/tariffs.json`. После изменения compose-файла пересоздайте контейнер:
|
||||
В `docker-compose-dev.yml` каталог `./data` монтируется в контейнер как `/app/data`, чтобы Web App админка могла сохранять `data/tariffs.json`. После изменения compose-файла пересоздайте контейнер:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose-dev.yml up -d --build --force-recreate
|
||||
|
||||
+2
-2
@@ -2,10 +2,10 @@
|
||||
|
||||
Бот поддерживает два способа описания продаж:
|
||||
|
||||
- JSON-каталог тарифов из `TARIFFS_CONFIG_PATH` (по умолчанию `config/tariffs.json`);
|
||||
- JSON-каталог тарифов из `TARIFFS_CONFIG_PATH` (по умолчанию `data/tariffs.json`);
|
||||
- конфигурация через переменные `.env`, если JSON-файл отсутствует.
|
||||
|
||||
JSON-каталог может содержать несколько тарифов разных моделей: подписки на срок, пакеты трафика без срока действия, разные наборы Internal Squads, лимиты устройств и пакеты докупки. Пример формата: [config/tariffs.example.json](../config/tariffs.example.json).
|
||||
JSON-каталог может содержать несколько тарифов разных моделей: подписки на срок, пакеты трафика без срока действия, разные наборы Internal Squads, лимиты устройств и пакеты докупки. Пример формата: [data/tariffs.example.json](../data/tariffs.example.json).
|
||||
|
||||
Коротко по моделям:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user