team-9/backend/endpoints/geo_access.py

54 lines
1.5 KiB
Python
Raw Normal View History

2025-08-02 01:52:25 +02:00
from dataclasses import dataclass
from typing import Literal, TypedDict
from fastapi import APIRouter
from geo_access import lido_circle_checker
geo_access_router = APIRouter(prefix="/geo-access")
@dataclass
class GeoAccessRequest:
"""
Request model for geo access.
"""
coords: tuple[float, float]
2025-08-02 01:52:54 +02:00
# type: Literal["circle", "polygon"] | None = "circle"
2025-08-02 01:52:25 +02:00
type_checker = {
"circle": lido_circle_checker,
# "polygon": lido_polygon_checker
}
@geo_access_router.post("/")
async def get_geo_access(request: GeoAccessRequest):
with open("test.json", "w") as f:
f.write(repr(request))
# return {
# "success": type_checker.get(request.type, "circle").is_inside(request.coords)
# }
return {"success": True}
2025-08-02 02:57:45 +02:00
@geo_access_router.post("/real")
async def get_geo_access_real(request: GeoAccessRequest):
"""Controllo reale se le coordinate sono dentro il raggio di 50 metri"""
try:
# Centro del controllo geografico (Lido di Bolzano)
CENTER_LAT = 46.68349
CENTER_LON = 11.19043
RADIUS_METERS = 50
# Creo il checker per il cerchio di 50 metri
from geo_access import CircleChecker
geo_checker = CircleChecker((CENTER_LAT, CENTER_LON), RADIUS_METERS)
# Controllo se le coordinate sono dentro il cerchio
is_inside = geo_checker.is_inside(tuple(request.coords))
return {"success": is_inside}
except Exception as e:
return {"success": False, "error": str(e)}