"""CRUD operations for Settings.""" import json from typing import Optional from sqlalchemy.orm import Session from app.models.settings import Settings def get_setting(db: Session, key: str) -> Optional[Settings]: """Get a setting by key.""" return db.query(Settings).filter(Settings.key == key).first() def get_setting_value(db: Session, key: str, default: any = None) -> any: """Get a setting value by key, with optional default.""" setting = get_setting(db, key) if setting: return setting.get_value() return default def update_setting(db: Session, key: str, value: any) -> Settings: """Update or create a setting.""" setting = get_setting(db, key) if setting is None: setting = Settings(key=key) db.add(setting) # Determine how to store the value (DB has only bool + string columns) if isinstance(value, bool): setting.value_bool = value setting.value_str = None elif isinstance(value, str) and value.lower() in ("true", "false", "1", "0"): setting.value_bool = value.lower() in ("true", "1") setting.value_str = None elif isinstance(value, (dict, list)): setting.value_str = json.dumps(value) setting.value_bool = None else: setting.value_str = str(value) setting.value_bool = None db.commit() db.refresh(setting) return setting def get_all_settings(db: Session) -> list[Settings]: """Get all settings.""" return db.query(Settings).all()