42 lines
1.3 KiB
Python
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)
|