from typing import List from fastapi import APIRouter, Depends, status from sqlalchemy.ext.asyncio import AsyncSession from backend.api.deps import AuthUser, require_admin from backend.db.session import get_session from backend.modules.settings.schemas import SettingCreate, SettingOut, SettingUpdate from backend.modules.settings.service import create_setting, delete_setting, list_settings, update_setting router = APIRouter(prefix="/api/v1/settings", tags=["settings"]) @router.get("", response_model=List[SettingOut]) async def get_settings( session: AsyncSession = Depends(get_session), auth_user: AuthUser = Depends(require_admin), ) -> List[SettingOut]: settings = await list_settings(session) return [SettingOut.model_validate(s) for s in settings] @router.post("", response_model=SettingOut, status_code=status.HTTP_201_CREATED) async def create_setting_endpoint( payload: SettingCreate, session: AsyncSession = Depends(get_session), auth_user: AuthUser = Depends(require_admin), ) -> SettingOut: setting = await create_setting(session, payload.model_dump()) return SettingOut.model_validate(setting) @router.put("/{setting_id}", response_model=SettingOut) async def update_setting_endpoint( setting_id: int, payload: SettingUpdate, session: AsyncSession = Depends(get_session), auth_user: AuthUser = Depends(require_admin), ) -> SettingOut: setting = await update_setting(session, setting_id, payload.model_dump(exclude_unset=True)) return SettingOut.model_validate(setting) @router.delete("/{setting_id}", status_code=status.HTTP_204_NO_CONTENT) async def delete_setting_endpoint( setting_id: int, session: AsyncSession = Depends(get_session), auth_user: AuthUser = Depends(require_admin), ): await delete_setting(session, setting_id)