49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
"""CRUD operations for Settings."""
|
|
|
|
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 if value is bool or string
|
|
if isinstance(value, bool):
|
|
setting.value_bool = value
|
|
setting.value_str = None
|
|
elif isinstance(value, str) and value.lower() in ('true', 'false'):
|
|
setting.value_bool = value.lower() == 'true'
|
|
setting.value_str = 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()
|