from fastapi import APIRouter, Depends, HTTPException from typing import List from schemas.reslevis import ( BuildingItem, PlanItem, ZoneItem, GatewayItem, TrackerItem, OperatorItem, SubjectItem, AlarmItem, TrackItem, ) from logica_reslevis.gateway import GatewayJsonRepository from logica_reslevis.building import BuildingJsonRepository from logica_reslevis.plan import PlanJsonRepository from logica_reslevis.zone import ZoneJsonRepository from logica_reslevis.tracker import TrackerJsonRepository from logica_reslevis.operator import OperatorJsonRepository from logica_reslevis.subject import SubjectJsonRepository from logica_reslevis.alarm import AlarmJsonRepository from logica_reslevis.track import TrackJsonRepository from security import get_current_user router = APIRouter() gateway_repo = GatewayJsonRepository() building_repo = BuildingJsonRepository() plan_repo = PlanJsonRepository() zone_repo = ZoneJsonRepository() tracker_repo = TrackerJsonRepository() operator_repo = OperatorJsonRepository() subject_repo = SubjectJsonRepository() alarm_repo = AlarmJsonRepository() track_repo = TrackJsonRepository() @router.get( "/getGateways", response_model=List[GatewayItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="getGateway", ) def getGateways(): return gateway_repo.list() @router.post( "/postGateway", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="postGateway", ) 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(get_current_user)], summary="putGateway", ) 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(get_current_user)], summary="removeGateway", ) 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.get( "/getBuildings", response_model=List[BuildingItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="getBuilding", ) def getBuildings(): return building_repo.list() @router.post( "/postBuilding", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="postBuilding", ) def postBuilding(item: BuildingItem): try: building_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( "/updateBuilding", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="putBuilding", ) def updateBuilding(item: BuildingItem): try: building_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( "/removeBuilding/{building_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="removeBuilding", ) def removeBuilding(building_id: str): try: building_repo.remove(building_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.get( "/getPlans", response_model=List[PlanItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="getPlan", ) def getPlans(): return plan_repo.list() @router.post( "/postPlan", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="postPlan", ) def postPlan(item: PlanItem): try: plan_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( "/updatePlan", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="putPlan", ) def updatePlan(item: PlanItem): try: plan_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( "/removePlan/{plan_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="removePlan", ) def removePlan(plan_id: str): try: plan_repo.remove(plan_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.get( "/getZones", response_model=List[ZoneItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="getZone", ) def getZones(): return zone_repo.list() @router.post( "/postZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="postZone", ) def postZone(item: ZoneItem): try: zone_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( "/updateZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="putZone", ) def updateZone(item: ZoneItem): try: zone_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( "/removeZone/{zone_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="removeZone", ) def removeZone(zone_id: str): try: zone_repo.remove(zone_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.get( "/getTrackers", response_model=List[TrackerItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="getTracker", ) def getTrackers(): return tracker_repo.list() @router.post( "/postTracker", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="postTracker", ) def postTracker(item: TrackerItem): try: tracker_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( "/updateTracker", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="putTracker", ) def updateTracker(item: TrackerItem): try: tracker_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( "/removeTracker/{tracker_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="removeTracker", ) def removeTracker(tracker_id: str): try: tracker_repo.remove(tracker_id) 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}") return {"message": "OK"} @router.get( "/getOperators", response_model=List[OperatorItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="getOperator", ) def getOperators(): return operator_repo.list() @router.post( "/postOperator", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="postOperator", ) def postOperator(item: OperatorItem): try: operator_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( "/updateOperator", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="putOperator", ) def updateOperator(item: OperatorItem): try: operator_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( "/removeOperator/{operator_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="removeOperator", ) def removeOperator(operator_id: str): try: operator_repo.remove(operator_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.get( "/getSubjects", response_model=List[SubjectItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="getSubject", ) def getSubjects(): return subject_repo.list() @router.post( "/postSubject", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="postSubject", ) def postSubject(item: SubjectItem): try: subject_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( "/updateSubject", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="putSubject", ) def updateSubject(item: SubjectItem): try: subject_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( "/removeSubject/{subject_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="removeSubject", ) def removeSubject(subject_id: str): try: subject_repo.remove(subject_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.get( "/getAlarms", response_model=List[AlarmItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="getAlarm", ) def getAlarms(): return alarm_repo.list() @router.post( "/postAlarm", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="postAlarm", ) def postAlarm(item: AlarmItem): try: alarm_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( "/updateAlarm", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="putAlarm", ) def updateAlarm(item: AlarmItem): try: alarm_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( "/removeAlarm/{alarm_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="removeAlarm", ) def removeAlarm(alarm_id: str): try: alarm_repo.remove(alarm_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.get( "/getTracks", response_model=List[TrackItem], tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="getTrack", ) def getTracks(): return track_repo.list() @router.post( "/postTrack", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="postTrack", ) def postTrack(item: TrackItem): try: track_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( "/updateTrack", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="putTrack", ) def updateTrack(item: TrackItem): try: track_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( "/removeTrack/{track_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)], summary="removeTrack", ) def removeTrack(track_id: str): try: track_repo.remove(track_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}")