63 lines
1.7 KiB
Python
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,
|
|
}
|