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] # type: Literal["circle", "polygon"] | None = "circle" 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} @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 = 2000 # 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)}