diff --git a/core/bootstrap.py b/core/bootstrap.py index 497e993b..e68d98b0 100644 --- a/core/bootstrap.py +++ b/core/bootstrap.py @@ -6,6 +6,7 @@ from .settings.modes_config import MODES_CONFIG, load_modes_config, update_modes from .settings.money_config import MONEY_CONFIG, load_money_config, update_money_config from .settings.notifications_config import NOTIFICATIONS_CONFIG, load_notifications_config, update_notifications_config from .settings.payments_config import PAYMENTS_CONFIG, load_payments_config, update_payments_config +from .settings.providers_order_config import PROVIDERS_ORDER, load_providers_order, update_providers_order from .settings.tariffs_config import TARIFFS_CONFIG, load_tariffs_config, update_tariffs_config @@ -15,6 +16,7 @@ async def bootstrap() -> None: await load_notifications_config(session) await load_modes_config(session) await load_payments_config(session) + await load_providers_order(session) await load_money_config(session) await load_management_config(session) await load_tariffs_config(session) diff --git a/core/settings/providers_order_config.py b/core/settings/providers_order_config.py new file mode 100644 index 00000000..25bd06fd --- /dev/null +++ b/core/settings/providers_order_config.py @@ -0,0 +1,38 @@ +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from database.models import Setting + +PROVIDERS_ORDER: dict[str, int] = {} + + +async def load_providers_order(session: AsyncSession) -> None: + stmt = select(Setting).where(Setting.key == "PROVIDERS_ORDER") + result = await session.execute(stmt) + setting = result.scalar_one_or_none() + + PROVIDERS_ORDER.clear() + if setting and isinstance(setting.value, dict): + PROVIDERS_ORDER.update({k: int(v) for k, v in setting.value.items()}) + await session.flush() + + +async def update_providers_order(session: AsyncSession, new_order: dict[str, int]) -> None: + stmt = select(Setting).where(Setting.key == "PROVIDERS_ORDER") + result = await session.execute(stmt) + setting = result.scalar_one_or_none() + + if setting is None: + setting = Setting( + key="PROVIDERS_ORDER", + value=new_order, + description="Порядок отображения платёжных провайдеров", + ) + session.add(setting) + else: + setting.value = new_order + + await session.commit() + + PROVIDERS_ORDER.clear() + PROVIDERS_ORDER.update(new_order)