""" app/services/config_service.py Read and write runtime settings stored in the SQLite settings table. """ from __future__ import annotations import logging from app.config import DEFAULT_EMPTY_RESPONSE from app.database import get_conn, get_write_conn from app.models import ConfigResponse logger = logging.getLogger(__name__) def get_config() -> ConfigResponse: with get_conn() as conn: rows = conn.execute("SELECT key, value FROM settings").fetchall() data = {r["key"]: r["value"] for r in rows} return ConfigResponse( default_wait_seconds=int(data.get("default_wait_seconds", 10)), default_empty_response=data.get("default_empty_response") or DEFAULT_EMPTY_RESPONSE, ) def update_config( default_wait_seconds: int | None = None, default_empty_response: str | None = None, ) -> ConfigResponse: updates: dict[str, str] = {} if default_wait_seconds is not None: updates["default_wait_seconds"] = str(default_wait_seconds) if default_empty_response is not None: updates["default_empty_response"] = default_empty_response if updates: with get_write_conn() as conn: for key, value in updates.items(): conn.execute( "INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)", (key, value), ) logger.info("Config updated: %s", list(updates.keys())) return get_config()