From b9f165410f138c7f7bd2290178505772188ad5ef Mon Sep 17 00:00:00 2001 From: pollutri Date: Thu, 7 May 2026 12:49:35 +0200 Subject: [PATCH] Updated PUT alarm API --- routes/reslevis.py | 24 ++++++++++++++++++++++-- schemas/reslevis.py | 9 ++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/routes/reslevis.py b/routes/reslevis.py index 89f5a3b..f9c0f66 100644 --- a/routes/reslevis.py +++ b/routes/reslevis.py @@ -6,6 +6,7 @@ from urllib.parse import urlencode from uuid import UUID from fastapi import APIRouter, Depends, File, Form, HTTPException, Query, Request, UploadFile +from fastapi.encoders import jsonable_encoder import httpx import config_env from typing import Any, Dict, List, Optional @@ -219,6 +220,14 @@ def _normalize_alarm_core(row: dict) -> dict: 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: return os.path.join(config_env.RESLEVIS_MAPS_DIR, "maps.json") @@ -678,10 +687,15 @@ async def getAlarms(): dependencies=[Depends(get_current_user)], ) 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: resp = await client.patch( f"{ALERTS_CORE_BASE_URL}/reslevis/alerts/{item.id}", - json={"status": item.status}, + json=update_payload, ) if resp.status_code >= 400: @@ -692,10 +706,16 @@ async def updateAlarm(item: AlarmStatusUpdateItem): return {"message": "OK"} try: - return resp.json() + payload = resp.json() except ValueError: 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( "/getOperators", diff --git a/schemas/reslevis.py b/schemas/reslevis.py index 7417ea0..0fd3110 100644 --- a/schemas/reslevis.py +++ b/schemas/reslevis.py @@ -183,7 +183,14 @@ class AlarmCoreItem(BaseModel): class AlarmStatusUpdateItem(BaseModel): 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): id: UUID