Files
webcarto/backend/app/routes/settings.py
2026-02-09 00:01:29 +01:00

63 lines
1.7 KiB
Python

from fastapi import APIRouter, Depends
from pydantic import BaseModel
from typing import Optional
from sqlmodel import Session
from ..database import get_session
from ..models import MapSettings
router = APIRouter(prefix="/settings", tags=["settings"])
class MapSettingsUpdate(BaseModel):
center_lng: Optional[float] = None
center_lat: Optional[float] = None
zoom: Optional[float] = None
base_layer: Optional[str] = None
@router.get("/map")
def get_map_settings(session: Session = Depends(get_session)):
settings = session.get(MapSettings, 1)
if not settings:
return {
"center_lng": 2.35,
"center_lat": 48.85,
"zoom": 5.0,
"base_layer": "vector",
}
return {
"center_lng": settings.center_lng,
"center_lat": settings.center_lat,
"zoom": settings.zoom,
"base_layer": settings.base_layer,
}
@router.put("/map")
def save_map_settings(
data: MapSettingsUpdate,
session: Session = Depends(get_session),
):
settings = session.get(MapSettings, 1)
if not settings:
settings = MapSettings(id=1)
if data.center_lng is not None:
settings.center_lng = data.center_lng
if data.center_lat is not None:
settings.center_lat = data.center_lat
if data.zoom is not None:
settings.zoom = data.zoom
if data.base_layer is not None:
settings.base_layer = data.base_layer
session.add(settings)
session.commit()
session.refresh(settings)
return {
"center_lng": settings.center_lng,
"center_lat": settings.center_lat,
"zoom": settings.zoom,
"base_layer": settings.base_layer,
}