from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from typing import List from app.database import get_db from app.models import Setting from app.schemas import Setting as SettingSchema, SettingUpdate router = APIRouter(prefix="/api/settings", tags=["settings"]) @router.get("/", response_model=List[SettingSchema]) async def list_settings(db: AsyncSession = Depends(get_db)): result = await db.execute(select(Setting)) settings = result.scalars().all() return settings @router.get("/{key}", response_model=SettingSchema) 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 not setting: raise HTTPException(status_code=404, detail="Setting not found") return setting @router.put("/{key}", response_model=SettingSchema) async def update_setting( key: str, setting_update: SettingUpdate, db: AsyncSession = Depends(get_db) ): result = await db.execute(select(Setting).where(Setting.key == key)) setting = result.scalar_one_or_none() if not setting: # Create if not exists setting = Setting(key=key, value=setting_update.value) db.add(setting) else: setting.value = setting_update.value await db.commit() await db.refresh(setting) return setting