homelab_automation/app/crud/app_setting.py

42 lines
1.3 KiB
Python

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)