2025-12-10 12:02:17 +08:00

51 lines
1.8 KiB
Python

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)