import uuid from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models.setting import Setting async def get_setting(db: AsyncSession, key: str) -> Setting | None: result = await db.execute(select(Setting).where(Setting.key == key)) return result.scalar_one_or_none() async def get_setting_value(db: AsyncSession, key: str, default=None): setting = await get_setting(db, key) return setting.value if setting else default async def get_all_settings(db: AsyncSession) -> list[Setting]: result = await db.execute(select(Setting).order_by(Setting.key)) return list(result.scalars().all()) async def upsert_setting(db: AsyncSession, key: str, value, admin_user_id: uuid.UUID) -> Setting: setting = await get_setting(db, key) if setting: setting.value = value setting.updated_by = admin_user_id else: setting = Setting(key=key, value=value, updated_by=admin_user_id) db.add(setting) await db.flush() return setting