from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from datetime import datetime from ..dependencies import get_db, get_current_user, require_admin from ..models.user import User from ..models.session import ServerSetting from ..config import get_settings router = APIRouter(prefix="/api/settings", tags=["settings"]) DEFAULT_SETTINGS = { "autoMatchBooks": True, "autoMatchPodcasts": True, "matchSources": ["musicbrainz", "open_library", "google_books"], "podcastUpdateIntervalHours": 24, "coverAspectRatio": 1, "disableOpds": False, "logLevel": 2, "version": "2.4.0", "buildNumber": 1, } @router.get("") async def get_settings_endpoint( current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): result = await db.execute(select(ServerSetting)) rows = result.scalars().all() settings_dict = {**DEFAULT_SETTINGS} for row in rows: settings_dict[row.key] = row.value return settings_dict @router.patch("") async def update_settings( body: dict, admin: User = Depends(require_admin), db: AsyncSession = Depends(get_db), ): for key, value in body.items(): result = await db.execute(select(ServerSetting).where(ServerSetting.key == key)) setting = result.scalar_one_or_none() if setting: setting.value = value setting.updated_at = datetime.utcnow() else: db.add(ServerSetting(key=key, value=value)) await db.commit() return {"success": True}