You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.1 KiB
34 lines
1.1 KiB
from fastapi import APIRouter, Depends |
|
from sqlalchemy import select |
|
from sqlalchemy.ext.asyncio import AsyncSession |
|
|
|
from app.database import get_db |
|
from app.models.setting import Setting |
|
from app.schemas.setting import SettingOut, SettingUpdate |
|
|
|
router = APIRouter(tags=["settings"]) |
|
|
|
|
|
@router.get("/api/settings/{key}", response_model=SettingOut) |
|
async def get_setting(key: str, db: AsyncSession = Depends(get_db)): |
|
result = await db.execute(select(Setting).where(Setting.key == key)) |
|
setting = result.scalar_one_or_none() |
|
if setting is None: |
|
return SettingOut(key=key, value=None) |
|
return setting |
|
|
|
|
|
@router.put("/api/settings/{key}", response_model=SettingOut) |
|
async def update_setting( |
|
key: str, data: SettingUpdate, db: AsyncSession = Depends(get_db) |
|
): |
|
result = await db.execute(select(Setting).where(Setting.key == key)) |
|
setting = result.scalar_one_or_none() |
|
if setting is None: |
|
setting = Setting(key=key, value=data.value) |
|
db.add(setting) |
|
else: |
|
setting.value = data.value |
|
await db.commit() |
|
await db.refresh(setting) |
|
return setting
|
|
|