25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

334 satır
9.4 KiB

  1. from fastapi import APIRouter, Depends, HTTPException, Request
  2. import httpx
  3. import config_env
  4. from typing import List
  5. from schemas.reslevis import (
  6. BuildingItem,
  7. FloorItem,
  8. ZoneItem,
  9. GatewayItem,
  10. TrackerItem,
  11. OperatorItem,
  12. SubjectItem,
  13. AlarmItem,
  14. TrackItem,
  15. TrackerZoneItem,
  16. )
  17. from logica_reslevis.gateway import GatewayJsonRepository
  18. from logica_reslevis.building import BuildingJsonRepository
  19. from logica_reslevis.floor import FloorJsonRepository
  20. from logica_reslevis.zone import ZoneJsonRepository
  21. from logica_reslevis.tracker import TrackerJsonRepository
  22. from logica_reslevis.operator import OperatorJsonRepository
  23. from logica_reslevis.subject import SubjectJsonRepository
  24. from logica_reslevis.alarm import AlarmJsonRepository
  25. from logica_reslevis.track import TrackJsonRepository
  26. from logica_reslevis.tracker_zone import TrackerZoneJsonRepository
  27. from security import get_current_user
  28. #CORE SYNC
  29. CORE_BASE_URL = config_env.CORE_API_URL.rstrip("/")
  30. CORE_TIMEOUT = 2.0 # secondi
  31. async def sync_core_get(request: Request) -> None:
  32. if request.method != "GET":
  33. return
  34. repo = CORE_GET_REPO_BY_PATH.get(request.url.path)
  35. if repo is None:
  36. return
  37. try:
  38. async with httpx.AsyncClient(timeout=CORE_TIMEOUT) as client:
  39. resp = await client.get(
  40. f"{CORE_BASE_URL}{request.url.path}",
  41. params=request.query_params,
  42. )
  43. if 200 <= resp.status_code < 300:
  44. data = resp.json()
  45. if isinstance(data, list):
  46. repo._write_all(data) # aggiorna i file locali
  47. except (httpx.RequestError, ValueError):
  48. # CORE giù o risposta non valida -> uso il file locale
  49. pass
  50. router = APIRouter(dependencies=[Depends(sync_core_get)])
  51. gateway_repo = GatewayJsonRepository()
  52. building_repo = BuildingJsonRepository()
  53. floor_repo = FloorJsonRepository()
  54. zone_repo = ZoneJsonRepository()
  55. tracker_repo = TrackerJsonRepository()
  56. operator_repo = OperatorJsonRepository()
  57. subject_repo = SubjectJsonRepository()
  58. alarm_repo = AlarmJsonRepository()
  59. track_repo = TrackJsonRepository()
  60. tracker_zone_repo = TrackerZoneJsonRepository()
  61. CORE_GET_REPO_BY_PATH = {
  62. "/reslevis/getGateways": gateway_repo,
  63. "/reslevis/getBuildings": building_repo,
  64. "/reslevis/getFloors": floor_repo,
  65. "/reslevis/getZones": zone_repo,
  66. "/reslevis/getTrackers": tracker_repo,
  67. "/reslevis/getTrackerZones": tracker_zone_repo,
  68. "/reslevis/getTracks": track_repo,
  69. "/reslevis/getOperators": operator_repo,
  70. "/reslevis/getSubjects": subject_repo,
  71. }
  72. @router.get(
  73. "/getGateways",
  74. response_model=List[GatewayItem],
  75. tags=["Reslevis"],
  76. dependencies=[Depends(get_current_user)],
  77. )
  78. def getGateways():
  79. return gateway_repo.list()
  80. @router.post("/postGateway", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  81. def postGateway(item: GatewayItem):
  82. gateway_repo.add(item)
  83. return {"message": "OK"}
  84. @router.put("/updateGateway", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  85. def updateGateway(item: GatewayItem):
  86. gateway_repo.update(item)
  87. return {"message": "OK"}
  88. @router.delete("/removeGateway/{gateway_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  89. def removeGateway(gateway_id: str):
  90. gateway_repo.remove(gateway_id)
  91. return {"message": "OK"}
  92. @router.get(
  93. "/getBuildings",
  94. response_model=List[BuildingItem],
  95. tags=["Reslevis"],
  96. dependencies=[Depends(get_current_user)],
  97. )
  98. def getBuildings():
  99. return building_repo.list()
  100. @router.post("/postBuilding", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  101. def postBuilding(item: BuildingItem):
  102. building_repo.add(item)
  103. return {"message": "OK"}
  104. @router.put("/updateBuilding", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  105. def updateBuilding(item: BuildingItem):
  106. building_repo.update(item)
  107. return {"message": "OK"}
  108. @router.delete("/removeBuilding/{building_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  109. def removeBuilding(building_id: str):
  110. building_repo.remove(building_id)
  111. return {"message": "OK"}
  112. @router.get(
  113. "/getFloors",
  114. response_model=List[FloorItem],
  115. tags=["Reslevis"],
  116. dependencies=[Depends(get_current_user)],
  117. )
  118. def getFloors():
  119. return floor_repo.list()
  120. @router.post("/postFloor", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  121. def postFloor(item: FloorItem):
  122. floor_repo.add(item)
  123. return {"message": "OK"}
  124. @router.put("/updateFloor", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  125. def updateFloor(item: FloorItem):
  126. floor_repo.update(item)
  127. return {"message": "OK"}
  128. @router.delete("/removeFloor/{floor_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  129. def removeFloor(floor_id: str):
  130. floor_repo.remove(floor_id)
  131. return {"message": "OK"}
  132. @router.get(
  133. "/getZones",
  134. response_model=List[ZoneItem],
  135. tags=["Reslevis"],
  136. dependencies=[Depends(get_current_user)],
  137. )
  138. def getZones():
  139. return zone_repo.list()
  140. @router.post("/postZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  141. def postZone(item: ZoneItem):
  142. zone_repo.add(item)
  143. return {"message": "OK"}
  144. @router.put("/updateZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  145. def updateZone(item: ZoneItem):
  146. zone_repo.update(item)
  147. return {"message": "OK"}
  148. @router.delete("/removeZone/{zone_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  149. def removeZone(zone_id: str):
  150. zone_repo.remove(zone_id)
  151. return {"message": "OK"}
  152. @router.get(
  153. "/getTrackers",
  154. response_model=List[TrackerItem],
  155. tags=["Reslevis"],
  156. dependencies=[Depends(get_current_user)],
  157. )
  158. def getTrackers():
  159. return tracker_repo.list()
  160. @router.post("/postTracker", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  161. def postTracker(item: TrackerItem):
  162. tracker_repo.add(item)
  163. return {"message": "OK"}
  164. @router.put("/updateTracker", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  165. def updateTracker(item: TrackerItem):
  166. tracker_repo.update(item)
  167. return {"message": "OK"}
  168. @router.delete("/removeTracker/{tracker_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  169. def removeTracker(tracker_id: str):
  170. tracker_repo.remove(tracker_id)
  171. return {"message": "OK"}
  172. @router.get(
  173. "/getTrackerZones",
  174. response_model=List[TrackerZoneItem],
  175. tags=["Reslevis"],
  176. dependencies=[Depends(get_current_user)],
  177. )
  178. def getTrackerZones():
  179. return tracker_zone_repo.list()
  180. @router.post("/postTrackerZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  181. def postTrackerZone(item: TrackerZoneItem):
  182. tracker_zone_repo.add(item)
  183. return {"message": "OK"}
  184. @router.put("/updateTrackerZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  185. def updateTrackerZone(item: TrackerZoneItem):
  186. tracker_zone_repo.update(item)
  187. return {"message": "OK"}
  188. @router.delete("/removeTrackerZone/{tracker_zone_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  189. def removeTrackerZone(tracker_zone_id: str):
  190. tracker_zone_repo.remove(tracker_zone_id)
  191. return {"message": "OK"}
  192. @router.get(
  193. "/getTracks",
  194. response_model=List[TrackItem],
  195. tags=["Reslevis"],
  196. dependencies=[Depends(get_current_user)],
  197. )
  198. def getTracks():
  199. return track_repo.list()
  200. @router.post("/postTrack", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  201. def postTrack(item: TrackItem):
  202. track_repo.add(item)
  203. return {"message": "OK"}
  204. @router.put("/updateTrack", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  205. def updateTrack(item: TrackItem):
  206. track_repo.update(item)
  207. return {"message": "OK"}
  208. @router.delete("/removeTrack/{track_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  209. def removeTrack(track_id: str):
  210. track_repo.remove(track_id)
  211. return {"message": "OK"}
  212. @router.get(
  213. "/getOperators",
  214. response_model=List[OperatorItem],
  215. tags=["Reslevis"],
  216. dependencies=[Depends(get_current_user)],
  217. )
  218. def getOperators():
  219. return operator_repo.list()
  220. @router.post("/postOperator", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  221. def postOperator(item: OperatorItem):
  222. operator_repo.add(item)
  223. return {"message": "OK"}
  224. @router.put("/updateOperator", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  225. def updateOperator(item: OperatorItem):
  226. operator_repo.update(item)
  227. return {"message": "OK"}
  228. @router.delete("/removeOperator/{operator_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  229. def removeOperator(operator_id: str):
  230. operator_repo.remove(operator_id)
  231. return {"message": "OK"}
  232. @router.get(
  233. "/getSubjects",
  234. response_model=List[SubjectItem],
  235. tags=["Reslevis"],
  236. dependencies=[Depends(get_current_user)],
  237. )
  238. def getSubjects():
  239. return subject_repo.list()
  240. @router.post("/postSubject", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  241. def postSubject(item: SubjectItem):
  242. subject_repo.add(item)
  243. return {"message": "OK"}
  244. @router.put("/updateSubject", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  245. def updateSubject(item: SubjectItem):
  246. subject_repo.update(item)
  247. return {"message": "OK"}
  248. @router.delete("/removeSubject/{subject_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  249. def removeSubject(subject_id: str):
  250. subject_repo.remove(subject_id)
  251. return {"message": "OK"}