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, }