Newer
Older
gnexus-tasks / backend / app / api / settings.py
"""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)