"""API глобальных настроек (ТЗ: валюта бюджетов — общая, выбирается один раз)."""
from typing import cast
from fastapi import APIRouter
from app.dependencies import DbDep, UserDep
from app.models import AppSetting
from app.schemas import CURRENCIES, AppSettingsOut, AppSettingsUpdate
router = APIRouter(prefix="/api/settings", tags=["settings"])
CURRENCY_KEY = "currency"
DEFAULT_CURRENCY = "UAH"
@router.get("", response_model=AppSettingsOut)
async def get_settings(db: DbDep, user: UserDep) -> AppSettingsOut:
row = cast(AppSetting | None, db.get(AppSetting, CURRENCY_KEY))
currency = row.value if row is not None and row.value in CURRENCIES else DEFAULT_CURRENCY
return AppSettingsOut(currency=currency)
@router.put("", response_model=AppSettingsOut)
async def update_settings(schema: AppSettingsUpdate, db: DbDep, user: UserDep) -> AppSettingsOut:
row = cast(AppSetting | None, db.get(AppSetting, CURRENCY_KEY))
if row is None:
row = AppSetting(key=CURRENCY_KEY, value=schema.currency)
db.add(row)
else:
row.value = schema.currency
db.flush()
return AppSettingsOut(currency=schema.currency)