from __future__ import annotations from typing import Optional from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models.app_setting import AppSetting class AppSettingRepository: def __init__(self, session: AsyncSession): self.session = session async def get(self, key: str) -> Optional[AppSetting]: stmt = select(AppSetting).where(AppSetting.key == key) result = await self.session.execute(stmt) return result.scalar_one_or_none() async def get_value(self, key: str, default: Optional[str] = None) -> Optional[str]: row = await self.get(key) if row is None: return default return row.value if row.value is not None else default async def set_value(self, key: str, value: Optional[str]) -> AppSetting: row = await self.get(key) if row is None: row = AppSetting(key=key, value=value) self.session.add(row) await self.session.flush() return row row.value = value await self.session.flush() return row # Alias for compatibility async def set(self, key: str, value: Optional[str]) -> AppSetting: """Alias for set_value.""" return await self.set_value(key, value)