from app.core.models.base import AlchemyBase from sqlalchemy import Column, Integer, String, JSON, select class ServiceConfigValue(AlchemyBase): __tablename__ = 'service_config' id = Column(Integer, autoincrement=True, primary_key=True) key = Column(String(128), nullable=False, unique=True) packed_value = Column(JSON, nullable=False, default={}) @property def value(self): return self.packed_value['value'] class ServiceConfig: def __init__(self, session): self.session = session async def get(self, key, default=None): result = (await self.session.execute(select(ServiceConfigValue).where(ServiceConfigValue.key == key))).scalars().first() return (result.value if result else None) or default async def set(self, key, value): result = (await self.session.execute(select(ServiceConfigValue).where(ServiceConfigValue.key == key))).scalars().first() if not result: result = ServiceConfigValue(key=key) self.session.add(result) await self.session.commit() return await self.set(key, value) result.packed_value = {'value': value} await self.session.commit() return