|
- from fastapi import APIRouter, Depends, HTTPException, status
- from typing import List
- from schemas.reslevis import (
- BuildingItem, PlanItem, ZoneItem, GatewayItem, TrackerItem,
- OperatorItem, SubjectItem, AlarmItem, TrackItem
- )
- from logica_reslevis.gateway import GatewayJsonRepository
-
- # importa le dipendenze di sicurezza
- from security import get_current_user, require_roles
-
- gateway_repo = GatewayJsonRepository()
- router = APIRouter()
-
- # -----------------------
- # Endpoints pubblici (se vuoi che restino pubblici, niente Depends)
- # -----------------------
- @router.get("/getBuildings", response_model=List[BuildingItem], tags=["Reslevis"])
- def getBuildings():
- return []
-
- @router.get("/getPlans", response_model=List[PlanItem], tags=["Reslevis"])
- def getPlans():
- return []
-
- @router.get("/getZones", response_model=List[ZoneItem], tags=["Reslevis"])
- def getZones():
- return []
-
- # -----------------------
- # Endpoints protetti: richiedono almeno un Bearer token valido
- # -----------------------
- @router.get("/getGateways", response_model=List[GatewayItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)])
- def getGateways():
- return gateway_repo.list()
-
- @router.get("/getTrackers", response_model=List[TrackerItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)])
- def getTrackers():
- return []
-
- @router.get("/getOperators", response_model=List[OperatorItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)])
- def getOperators():
- return []
-
- @router.get("/getSubjects", response_model=List[SubjectItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)])
- def getSubjects():
- return []
-
- @router.get("/getAlarms", response_model=List[AlarmItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)])
- def getAlarms():
- return []
-
- @router.get("/getTracks", response_model=List[TrackItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)])
- def getTracks():
- return []
-
- # -----------------------
- # Operazioni di scrittura su Gateway:
- # - Token valido
- # - Ruolo richiesto (esempio: "reslevis:write")
- # Cambia il nome ruolo per allinearlo a come lo hai definito in Keycloak
- # -----------------------
- write_role = "reslevis:write" # esempio; usa il tuo realm/client role
-
- @router.post(
- "/postGateway",
- tags=["Reslevis"],
- dependencies=[Depends(require_roles(write_role))]
- )
- def postGateway(item: GatewayItem):
- try:
- gateway_repo.add(item)
- return {"message": "OK"}
- except ValueError as e:
- raise HTTPException(status_code=409, detail=str(e))
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Errore interno: {e}")
-
- @router.put(
- "/updateGateway",
- tags=["Reslevis"],
- dependencies=[Depends(require_roles(write_role))]
- )
- def updateGateway(item: GatewayItem):
- try:
- gateway_repo.update(item)
- return {"message": "OK"}
- except ValueError as e:
- msg = str(e)
- if "non trovato" in msg:
- raise HTTPException(status_code=404, detail=msg)
- raise HTTPException(status_code=409, detail=msg)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Errore interno: {e}")
-
- @router.delete(
- "/removeGateway/{gateway_id}",
- tags=["Reslevis"],
- dependencies=[Depends(require_roles(write_role))]
- )
- def removeGateway(gateway_id: str):
- try:
- gateway_repo.remove(gateway_id)
- return {"message": "OK"}
- except ValueError as e:
- raise HTTPException(status_code=404, detail=str(e))
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Errore interno: {e}")
-
- @router.post("/postBuilding", tags=["Reslevis"], dependencies=[Depends(require_roles(write_role))])
- def postBuilding(item: BuildingItem):
- return {"message": "OK"}
-
- @router.post("/postPlan", tags=["Reslevis"], dependencies=[Depends(require_roles(write_role))])
- def postPlan(item: PlanItem):
- return {"message": "OK"}
-
- @router.post("/postZone", tags=["Reslevis"], dependencies=[Depends(require_roles(write_role))])
- def postZone(item: ZoneItem):
- return {"message": "OK"}
-
- @router.post("/postTracker", tags=["Reslevis"], dependencies=[Depends(require_roles(write_role))])
- def postTracker(item: TrackerItem):
- return {"message": "OK"}
-
- @router.post("/postOperator", tags=["Reslevis"], dependencies=[Depends(require_roles(write_role))])
- def postOperator(item: OperatorItem):
- return {"message": "OK"}
-
- @router.post("/postSubject", tags=["Reslevis"], dependencies=[Depends(require_roles(write_role))])
- def postSubject(item: SubjectItem):
- return {"message": "OK"}
-
- @router.post("/postAlarm", tags=["Reslevis"], dependencies=[Depends(require_roles(write_role))])
- def postAlarm(item: AlarmItem):
- return {"message": "OK"}
-
- @router.post("/postTrack", tags=["Reslevis"], dependencies=[Depends(require_roles(write_role))])
- def postTrack(item: TrackItem):
- return {"message": "OK"}
|