Files
Solo_bot/core/settings/money_config.py
T

81 lines
2.4 KiB
Python

from typing import Any
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from database.models import Setting
from database.settings_cache import settings_cache
from ..defaults import DEFAULT_MONEY_CONFIG
from .runtime_sync import publish_runtime_config, register_runtime_config
MONEY_CONFIG: dict[str, Any] = DEFAULT_MONEY_CONFIG.copy()
register_runtime_config("MONEY_CONFIG", MONEY_CONFIG)
def get_currency_mode() -> tuple[str, bool]:
mode_cfg = MONEY_CONFIG.get("CURRENCY_MODE", "RUB")
raw = str(mode_cfg or "RUB").upper()
if raw not in ("RUB", "USD", "RUB+USD", "RUB+USD_ONE_SCREEN"):
raw = "RUB"
one_screen = raw == "RUB+USD_ONE_SCREEN"
if raw in ("RUB+USD", "RUB+USD_ONE_SCREEN"):
base_mode = "RUB+USD"
else:
base_mode = raw
return base_mode, one_screen
async def load_money_config(session: AsyncSession) -> None:
stmt = select(Setting).where(Setting.key == "MONEY_CONFIG")
result = await session.execute(stmt)
setting = result.scalar_one_or_none()
if setting is None:
money_config = DEFAULT_MONEY_CONFIG.copy()
setting = Setting(
key="MONEY_CONFIG",
value=money_config,
description="Конфигурация валютных настроек",
)
session.add(setting)
else:
stored = setting.value or {}
money_config = DEFAULT_MONEY_CONFIG.copy()
money_config.update(stored)
setting.value = money_config
MONEY_CONFIG.clear()
MONEY_CONFIG.update(money_config)
await session.flush()
async def update_money_config(session: AsyncSession, new_values: dict[str, Any]) -> None:
stmt = select(Setting).where(Setting.key == "MONEY_CONFIG")
result = await session.execute(stmt)
setting = result.scalar_one_or_none()
if setting is None:
setting = Setting(
key="MONEY_CONFIG",
value=new_values,
description="Конфигурация валютных настроек",
)
session.add(setting)
else:
setting.value = new_values
await session.commit()
money_config = DEFAULT_MONEY_CONFIG.copy()
money_config.update(new_values)
MONEY_CONFIG.clear()
MONEY_CONFIG.update(money_config)
settings_cache.update("MONEY_CONFIG", money_config)
await publish_runtime_config("MONEY_CONFIG", money_config)