您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

330 行
9.2 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/getZones": zone_repo,
  64. "/reslevis/getTrackers": tracker_repo,
  65. "/reslevis/getTrackerZones": tracker_zone_repo,
  66. "/reslevis/getTracks": track_repo,
  67. }
  68. @router.get(
  69. "/getGateways",
  70. response_model=List[GatewayItem],
  71. tags=["Reslevis"],
  72. dependencies=[Depends(get_current_user)],
  73. )
  74. def getGateways():
  75. return gateway_repo.list()
  76. @router.post("/postGateway", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  77. def postGateway(item: GatewayItem):
  78. gateway_repo.add(item)
  79. return {"message": "OK"}
  80. @router.put("/updateGateway", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  81. def updateGateway(item: GatewayItem):
  82. gateway_repo.update(item)
  83. return {"message": "OK"}
  84. @router.delete("/removeGateway/{gateway_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  85. def removeGateway(gateway_id: str):
  86. gateway_repo.remove(gateway_id)
  87. return {"message": "OK"}
  88. @router.get(
  89. "/getBuildings",
  90. response_model=List[BuildingItem],
  91. tags=["Reslevis"],
  92. dependencies=[Depends(get_current_user)],
  93. )
  94. def getBuildings():
  95. return building_repo.list()
  96. @router.post("/postBuilding", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  97. def postBuilding(item: BuildingItem):
  98. building_repo.add(item)
  99. return {"message": "OK"}
  100. @router.put("/updateBuilding", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  101. def updateBuilding(item: BuildingItem):
  102. building_repo.update(item)
  103. return {"message": "OK"}
  104. @router.delete("/removeBuilding/{building_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  105. def removeBuilding(building_id: str):
  106. building_repo.remove(building_id)
  107. return {"message": "OK"}
  108. @router.get(
  109. "/getFloors",
  110. response_model=List[FloorItem],
  111. tags=["Reslevis"],
  112. dependencies=[Depends(get_current_user)],
  113. )
  114. def getFloors():
  115. return floor_repo.list()
  116. @router.post("/postFloor", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  117. def postFloor(item: FloorItem):
  118. floor_repo.add(item)
  119. return {"message": "OK"}
  120. @router.put("/updateFloor", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  121. def updateFloor(item: FloorItem):
  122. floor_repo.update(item)
  123. return {"message": "OK"}
  124. @router.delete("/removeFloor/{floor_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  125. def removeFloor(floor_id: str):
  126. floor_repo.remove(floor_id)
  127. return {"message": "OK"}
  128. @router.get(
  129. "/getZones",
  130. response_model=List[ZoneItem],
  131. tags=["Reslevis"],
  132. dependencies=[Depends(get_current_user)],
  133. )
  134. def getZones():
  135. return zone_repo.list()
  136. @router.post("/postZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  137. def postZone(item: ZoneItem):
  138. zone_repo.add(item)
  139. return {"message": "OK"}
  140. @router.put("/updateZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  141. def updateZone(item: ZoneItem):
  142. zone_repo.update(item)
  143. return {"message": "OK"}
  144. @router.delete("/removeZone/{zone_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  145. def removeZone(zone_id: str):
  146. zone_repo.remove(zone_id)
  147. return {"message": "OK"}
  148. @router.get(
  149. "/getTrackers",
  150. response_model=List[TrackerItem],
  151. tags=["Reslevis"],
  152. dependencies=[Depends(get_current_user)],
  153. )
  154. def getTrackers():
  155. return tracker_repo.list()
  156. @router.post("/postTracker", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  157. def postTracker(item: TrackerItem):
  158. tracker_repo.add(item)
  159. return {"message": "OK"}
  160. @router.put("/updateTracker", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  161. def updateTracker(item: TrackerItem):
  162. tracker_repo.update(item)
  163. return {"message": "OK"}
  164. @router.delete("/removeTracker/{tracker_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  165. def removeTracker(tracker_id: str):
  166. tracker_repo.remove(tracker_id)
  167. return {"message": "OK"}
  168. @router.get(
  169. "/getTrackerZones",
  170. response_model=List[TrackerZoneItem],
  171. tags=["Reslevis"],
  172. dependencies=[Depends(get_current_user)],
  173. )
  174. def getTrackerZones():
  175. return tracker_zone_repo.list()
  176. @router.post("/postTrackerZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  177. def postTrackerZone(item: TrackerZoneItem):
  178. tracker_zone_repo.add(item)
  179. return {"message": "OK"}
  180. @router.put("/updateTrackerZone", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  181. def updateTrackerZone(item: TrackerZoneItem):
  182. tracker_zone_repo.update(item)
  183. return {"message": "OK"}
  184. @router.delete("/removeTrackerZone/{tracker_zone_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  185. def removeTrackerZone(tracker_zone_id: str):
  186. tracker_zone_repo.remove(tracker_zone_id)
  187. return {"message": "OK"}
  188. @router.get(
  189. "/getTracks",
  190. response_model=List[TrackItem],
  191. tags=["Reslevis"],
  192. dependencies=[Depends(get_current_user)],
  193. )
  194. def getTracks():
  195. return track_repo.list()
  196. @router.post("/postTrack", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  197. def postTrack(item: TrackItem):
  198. track_repo.add(item)
  199. return {"message": "OK"}
  200. @router.put("/updateTrack", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  201. def updateTrack(item: TrackItem):
  202. track_repo.update(item)
  203. return {"message": "OK"}
  204. @router.delete("/removeTrack/{track_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  205. def removeTrack(track_id: str):
  206. track_repo.remove(track_id)
  207. return {"message": "OK"}
  208. @router.get(
  209. "/getOperators",
  210. response_model=List[OperatorItem],
  211. tags=["Reslevis"],
  212. dependencies=[Depends(get_current_user)],
  213. )
  214. def getOperators():
  215. return operator_repo.list()
  216. @router.post("/postOperator", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  217. def postOperator(item: OperatorItem):
  218. operator_repo.add(item)
  219. return {"message": "OK"}
  220. @router.put("/updateOperator", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  221. def updateOperator(item: OperatorItem):
  222. operator_repo.update(item)
  223. return {"message": "OK"}
  224. @router.delete("/removeOperator/{operator_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  225. def removeOperator(operator_id: str):
  226. operator_repo.remove(operator_id)
  227. return {"message": "OK"}
  228. @router.get(
  229. "/getSubjects",
  230. response_model=List[SubjectItem],
  231. tags=["Reslevis"],
  232. dependencies=[Depends(get_current_user)],
  233. )
  234. def getSubjects():
  235. return subject_repo.list()
  236. @router.post("/postSubject", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  237. def postSubject(item: SubjectItem):
  238. subject_repo.add(item)
  239. return {"message": "OK"}
  240. @router.put("/updateSubject", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  241. def updateSubject(item: SubjectItem):
  242. subject_repo.update(item)
  243. return {"message": "OK"}
  244. @router.delete("/removeSubject/{subject_id}", tags=["Reslevis"], dependencies=[Depends(get_current_user)])
  245. def removeSubject(subject_id: str):
  246. subject_repo.remove(subject_id)
  247. return {"message": "OK"}