diff --git a/routes/reslevis.py b/routes/reslevis.py index 43b2e0a..d9cc507 100644 --- a/routes/reslevis.py +++ b/routes/reslevis.py @@ -1,4 +1,6 @@ -from fastapi import APIRouter, Depends, HTTPException +from fastapi import APIRouter, Depends, HTTPException, Request +import httpx +import config_env from typing import List from schemas.reslevis import ( @@ -27,7 +29,35 @@ from logica_reslevis.tracker_zone import TrackerZoneJsonRepository from security import get_current_user -router = APIRouter() +#CORE SYNC +CORE_BASE_URL = config_env.CORE_API_URL.rstrip("/") +CORE_TIMEOUT = 2.0 # secondi + +async def sync_core_get(request: Request) -> None: + if request.method != "GET": + return + + repo = CORE_GET_REPO_BY_PATH.get(request.url.path) + if repo is None: + return + + try: + async with httpx.AsyncClient(timeout=CORE_TIMEOUT) as client: + resp = await client.get( + f"{CORE_BASE_URL}{request.url.path}", + params=request.query_params, + ) + + if 200 <= resp.status_code < 300: + data = resp.json() + if isinstance(data, list): + repo._write_all(data) # aggiorna i file locali + except (httpx.RequestError, ValueError): + # CORE giù o risposta non valida -> uso il file locale + pass + + +router = APIRouter(dependencies=[Depends(sync_core_get)]) gateway_repo = GatewayJsonRepository() building_repo = BuildingJsonRepository() @@ -40,6 +70,18 @@ alarm_repo = AlarmJsonRepository() track_repo = TrackJsonRepository() tracker_zone_repo = TrackerZoneJsonRepository() +CORE_GET_REPO_BY_PATH = { + "/reslevis/getGateways": gateway_repo, + "/reslevis/getBuildings": building_repo, + "/reslevis/getFloors": floor_repo, + "/reslevis/getZones": zone_repo, + "/reslevis/getTrackers": tracker_repo, + "/reslevis/getTrackerZones": tracker_zone_repo, + "/reslevis/getTracks": track_repo, + "/reslevis/getOperators": operator_repo, + "/reslevis/getSubjects": subject_repo, +} + @router.get( "/getGateways", @@ -103,10 +145,10 @@ def removeBuilding(building_id: str): tags=["Reslevis"], dependencies=[Depends(get_current_user)], ) + def getFloors(): return floor_repo.list() - @router.post("/postFloor", tags=["Reslevis"], dependencies=[Depends(get_current_user)]) def postFloor(item: FloorItem): floor_repo.add(item)