소스 검색

Updated PUT alarm API

master
Lorenzo Pollutri 1 개월 전
부모
커밋
b9f165410f
2개의 변경된 파일30개의 추가작업 그리고 3개의 파일을 삭제
  1. +22
    -2
      routes/reslevis.py
  2. +8
    -1
      schemas/reslevis.py

+ 22
- 2
routes/reslevis.py 파일 보기

@@ -6,6 +6,7 @@ from urllib.parse import urlencode
from uuid import UUID from uuid import UUID


from fastapi import APIRouter, Depends, File, Form, HTTPException, Query, Request, UploadFile from fastapi import APIRouter, Depends, File, Form, HTTPException, Query, Request, UploadFile
from fastapi.encoders import jsonable_encoder
import httpx import httpx
import config_env import config_env
from typing import Any, Dict, List, Optional from typing import Any, Dict, List, Optional
@@ -219,6 +220,14 @@ def _normalize_alarm_core(row: dict) -> dict:
return row return row




def _model_update_dict(model: Any) -> Dict[str, Any]:
if hasattr(model, "model_dump"):
data = model.model_dump(exclude_unset=True)
else:
data = model.dict(exclude_unset=True)
return jsonable_encoder(data)


def _floor_maps_index_path() -> str: def _floor_maps_index_path() -> str:
return os.path.join(config_env.RESLEVIS_MAPS_DIR, "maps.json") return os.path.join(config_env.RESLEVIS_MAPS_DIR, "maps.json")


@@ -678,10 +687,15 @@ async def getAlarms():
dependencies=[Depends(get_current_user)], dependencies=[Depends(get_current_user)],
) )
async def updateAlarm(item: AlarmStatusUpdateItem): async def updateAlarm(item: AlarmStatusUpdateItem):
update_payload = _model_update_dict(item)
update_payload.pop("id", None)
if not update_payload:
raise HTTPException(status_code=400, detail="No alarm fields to update")

async with httpx.AsyncClient(timeout=CORE_TIMEOUT) as client: async with httpx.AsyncClient(timeout=CORE_TIMEOUT) as client:
resp = await client.patch( resp = await client.patch(
f"{ALERTS_CORE_BASE_URL}/reslevis/alerts/{item.id}", f"{ALERTS_CORE_BASE_URL}/reslevis/alerts/{item.id}",
json={"status": item.status},
json=update_payload,
) )


if resp.status_code >= 400: if resp.status_code >= 400:
@@ -692,10 +706,16 @@ async def updateAlarm(item: AlarmStatusUpdateItem):
return {"message": "OK"} return {"message": "OK"}


try: try:
return resp.json()
payload = resp.json()
except ValueError: except ValueError:
return {"message": "OK"} return {"message": "OK"}


if isinstance(payload, dict):
return _normalize_alarm_core(payload)
if isinstance(payload, list):
return [_normalize_alarm_core(row) for row in payload if isinstance(row, dict)]
return payload



@router.get( @router.get(
"/getOperators", "/getOperators",


+ 8
- 1
schemas/reslevis.py 파일 보기

@@ -183,7 +183,14 @@ class AlarmCoreItem(BaseModel):


class AlarmStatusUpdateItem(BaseModel): class AlarmStatusUpdateItem(BaseModel):
id: UUID id: UUID
status: str
tracker_id: Optional[UUID] = None
type: Optional[str] = None
status: Optional[str] = None
timestamp: Optional[str] = None
operator: Optional[Union[UUID, str]] = None
operatorName: Optional[str] = None
assignment_timestamp: Optional[str] = None
resolution_timestamp: Optional[str] = None


class TrackItem(BaseModel): class TrackItem(BaseModel):
id: UUID id: UUID


불러오는 중...
취소
저장