37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
|
|
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
|