mapApp / api /shelters.py
mtahan's picture
Initial backend commit
a31fd7f verified
Raw
History Blame Contribute Delete
1.65 kB
import logging
from typing import Dict, Any, Optional
from fastapi import APIRouter, HTTPException, Query
from pydantic import BaseModel, Field
from services.supabase_service import save_shelter, get_shelters_in_bbox
logger = logging.getLogger("api_shelters")
router = APIRouter()
class ShelterCreateSchema(BaseModel):
name: str = Field(..., example="Refugio Escuela Miguel Otero Silva")
capacity: int = Field(..., ge=0)
occupancy: int = Field(0, ge=0)
latitude: float = Field(...)
longitude: float = Field(...)
resources: Optional[Dict[str, Any]] = Field(default_factory=dict)
@router.get("/bbox")
def get_shelters_in_view(
min_lat: float = Query(...),
min_lng: float = Query(...),
max_lat: float = Query(...),
max_lng: float = Query(...)
):
"""
Fetches shelters within the visible map bounding box.
"""
try:
shelters = get_shelters_in_bbox(min_lat, min_lng, max_lat, max_lng)
return shelters
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.post("/create")
def create_shelter(shelter: ShelterCreateSchema):
"""
Creates a new shelter.
"""
try:
saved = save_shelter(
name=shelter.name,
capacity=shelter.capacity,
occupancy=shelter.occupancy,
latitude=shelter.latitude,
longitude=shelter.longitude,
resources=shelter.resources or {}
)
return {"success": True, "shelter": saved}
except Exception as e:
logger.error(f"Error creating shelter: {e}")
raise HTTPException(status_code=500, detail=str(e))