51 lines
1.8 KiB
Python
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)
|