Files
kmtnflower/backend/app/api/station_config.py
T

51 lines
1.7 KiB
Python

"""Station config router: read/update the singleton station branding config."""
from fastapi import APIRouter, Depends, HTTPException, status
from app.auth import get_current_admin_user
from app.database import get_session
from app.models import StationConfig
from app.schemas import StationConfigResponse, StationConfigUpdate
from app.user_models import User
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
router = APIRouter()
@router.get("", response_model=StationConfigResponse)
async def get_station_config(session: AsyncSession = Depends(get_session)):
"""Return the singleton station config. Public endpoint."""
result = await session.execute(
select(StationConfig).where(StationConfig.key == "default")
)
config = result.scalar_one_or_none()
if config is None:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Station config not found. Run seed to initialize.",
)
return config
@router.put("", response_model=StationConfigResponse)
async def update_station_config(
payload: StationConfigUpdate,
session: AsyncSession = Depends(get_session),
current_user: User = Depends(get_current_admin_user),
):
"""Partial update of station config. Admin only."""
result = await session.execute(
select(StationConfig).where(StationConfig.key == "default")
)
config = result.scalar_one_or_none()
if config is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Station config not found")
for key, value in payload.model_dump(exclude_unset=True).items():
setattr(config, key, value)
await session.commit()
await session.refresh(config)
return config