27 lines
1.0 KiB
Python
27 lines
1.0 KiB
Python
from typing import Optional
|
|
from motor.motor_asyncio import AsyncIOMotorClient
|
|
from models.Settings import SystemSettings
|
|
from datetime import datetime, UTC
|
|
|
|
class SettingsRepo:
|
|
def __init__(self, client: AsyncIOMotorClient, db_name: str):
|
|
self.collection = client[db_name]["settings"]
|
|
|
|
async def get_settings(self) -> SystemSettings:
|
|
doc = await self.collection.find_one({"_id": "system_settings"})
|
|
if not doc:
|
|
# Create default settings if not exists
|
|
settings = SystemSettings()
|
|
await self.collection.insert_one(settings.model_dump(by_alias=True))
|
|
return settings
|
|
return SystemSettings(**doc)
|
|
|
|
async def update_settings(self, settings: SystemSettings) -> bool:
|
|
settings.updated_at = datetime.now(UTC)
|
|
result = await self.collection.replace_one(
|
|
{"_id": "system_settings"},
|
|
settings.model_dump(by_alias=True),
|
|
upsert=True
|
|
)
|
|
return result.modified_count > 0 or result.upserted_id is not None
|