53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
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)}
|