|
|
@@ -1,7 +1,7 @@ |
|
|
from fastapi import APIRouter, Depends, HTTPException, Request |
|
|
|
|
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Query, Request |
|
|
import httpx |
|
|
import httpx |
|
|
import config_env |
|
|
import config_env |
|
|
from typing import List |
|
|
|
|
|
|
|
|
from typing import List, Optional |
|
|
|
|
|
|
|
|
from schemas.reslevis import ( |
|
|
from schemas.reslevis import ( |
|
|
BuildingItem, |
|
|
BuildingItem, |
|
|
@@ -13,6 +13,7 @@ from schemas.reslevis import ( |
|
|
SubjectItem, |
|
|
SubjectItem, |
|
|
AlarmItem, |
|
|
AlarmItem, |
|
|
TrackItem, |
|
|
TrackItem, |
|
|
|
|
|
TrackHistoryItem, |
|
|
TrackerZoneItem, |
|
|
TrackerZoneItem, |
|
|
SettingItem, |
|
|
SettingItem, |
|
|
) |
|
|
) |
|
|
@@ -120,6 +121,7 @@ def _normalize_tracker(row: dict) -> dict: |
|
|
|
|
|
|
|
|
def _normalize_track(row: dict) -> dict: |
|
|
def _normalize_track(row: dict) -> dict: |
|
|
row = dict(row) |
|
|
row = dict(row) |
|
|
|
|
|
row["ID"] = row.get("ID") |
|
|
row["gateway"] = _none_if_empty(row.get("gateway")) |
|
|
row["gateway"] = _none_if_empty(row.get("gateway")) |
|
|
row["tracker"] = _none_if_empty(row.get("tracker")) |
|
|
row["tracker"] = _none_if_empty(row.get("tracker")) |
|
|
row["subject"] = _none_if_empty(row.get("subject")) |
|
|
row["subject"] = _none_if_empty(row.get("subject")) |
|
|
@@ -131,6 +133,9 @@ def _normalize_track(row: dict) -> dict: |
|
|
row["gatewayMac"] = _str_or_none(row.get("gatewayMac")) |
|
|
row["gatewayMac"] = _str_or_none(row.get("gatewayMac")) |
|
|
row["trackerMac"] = _str_or_none(row.get("trackerMac")) |
|
|
row["trackerMac"] = _str_or_none(row.get("trackerMac")) |
|
|
row["subjectName"] = _str_or_none(row.get("subjectName")) |
|
|
row["subjectName"] = _str_or_none(row.get("subjectName")) |
|
|
|
|
|
row["x"] = None if row.get("x") in ("", None) else row.get("x") |
|
|
|
|
|
row["y"] = None if row.get("y") in ("", None) else row.get("y") |
|
|
|
|
|
row["z"] = None if row.get("z") in ("", None) else row.get("z") |
|
|
# signal resta float o None |
|
|
# signal resta float o None |
|
|
row["signal"] = None if row.get("signal") in ("", None) else row.get("signal") |
|
|
row["signal"] = None if row.get("signal") in ("", None) else row.get("signal") |
|
|
return row |
|
|
return row |
|
|
@@ -327,6 +332,50 @@ def getTracks(): |
|
|
return track_repo.list() |
|
|
return track_repo.list() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get( |
|
|
|
|
|
"/getTracks/{tracker_id}", |
|
|
|
|
|
response_model=List[TrackHistoryItem], |
|
|
|
|
|
tags=["Reslevis"], |
|
|
|
|
|
dependencies=[Depends(get_current_user)], |
|
|
|
|
|
) |
|
|
|
|
|
async def getTrack( |
|
|
|
|
|
tracker_id: str, |
|
|
|
|
|
limit: Optional[int] = Query(None, ge=1), |
|
|
|
|
|
from_: Optional[str] = Query(None, alias="from"), |
|
|
|
|
|
to: Optional[str] = Query(None), |
|
|
|
|
|
): |
|
|
|
|
|
params = {} |
|
|
|
|
|
if limit is not None: |
|
|
|
|
|
params["limit"] = limit |
|
|
|
|
|
if from_: |
|
|
|
|
|
params["from"] = from_ |
|
|
|
|
|
if to: |
|
|
|
|
|
params["to"] = to |
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
async with httpx.AsyncClient(timeout=30.0, verify=False) as client: |
|
|
|
|
|
resp = await client.get( |
|
|
|
|
|
f"{CORE_BASE_URL}/reslevis/getTracks/{tracker_id}", |
|
|
|
|
|
params=params, |
|
|
|
|
|
) |
|
|
|
|
|
except httpx.RequestError as exc: |
|
|
|
|
|
raise HTTPException(status_code=502, detail=f"CORE request failed: {exc}") from exc |
|
|
|
|
|
|
|
|
|
|
|
if resp.status_code >= 400: |
|
|
|
|
|
detail = resp.text.strip() or "CORE request failed" |
|
|
|
|
|
raise HTTPException(status_code=resp.status_code, detail=detail) |
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
payload = resp.json() |
|
|
|
|
|
except ValueError as exc: |
|
|
|
|
|
raise HTTPException(status_code=502, detail="Invalid CORE response") from exc |
|
|
|
|
|
|
|
|
|
|
|
if not isinstance(payload, list): |
|
|
|
|
|
raise HTTPException(status_code=502, detail="Unexpected CORE response type") |
|
|
|
|
|
|
|
|
|
|
|
return [_normalize_track(row) for row in payload if isinstance(row, dict)] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/postTrack", tags=["Reslevis"], dependencies=[Depends(get_current_user)]) |
|
|
@router.post("/postTrack", tags=["Reslevis"], dependencies=[Depends(get_current_user)]) |
|
|
def postTrack(item: TrackItem): |
|
|
def postTrack(item: TrackItem): |
|
|
track_repo.add(item) |
|
|
track_repo.add(item) |
|
|
|