"""Anwendungseinstellungen.""" from fastapi import APIRouter from app.api.deps import DbSession from app.core.clock import period_bounds, period_key, today from app.schemas.settings import AppSettingsIn, AppSettingsOut from app.services.settings import load_settings, save_settings router = APIRouter(prefix="/settings", tags=["settings"]) def _out(month_start_day: int) -> AppSettingsOut: schluessel = period_key(today(), month_start_day) beginn, ende = period_bounds(schluessel, month_start_day) return AppSettingsOut( month_start_day=month_start_day, current_month=schluessel, current_period_start=beginn, current_period_end=ende, ) @router.get( "", response_model=AppSettingsOut, summary="Einstellungen lesen", description="Liefert den eingestellten Monatsbeginn und den daraus folgenden " "laufenden Abrechnungsmonat.", ) async def read_settings(session: DbSession) -> AppSettingsOut: return _out((await load_settings(session)).month_start_day) @router.put( "", response_model=AppSettingsOut, summary="Einstellungen ändern", description="Ein geänderter Monatsbeginn wirkt sofort auf Dashboard, Kalender, " "Budgets, Vorschau und Export.", ) async def update_settings(session: DbSession, payload: AppSettingsIn) -> AppSettingsOut: eintrag = await save_settings(session, month_start_day=payload.month_start_day) await session.commit() return _out(eintrag.month_start_day)