From bfe6df3ddd650234f8fd43c14d94dd0b41490f61 Mon Sep 17 00:00:00 2001 From: Fabian Eulitz Date: Sat, 2 May 2026 21:43:33 +0200 Subject: [PATCH] feat(timeline): add endpoint to retrieve timeline of a household --- surehub_api/entities/enums.py | 1 + surehub_api/routers/households.py | 8 +++++++- surehub_api/services/timeline.py | 8 ++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/surehub_api/entities/enums.py b/surehub_api/entities/enums.py index f574c70..7ccede4 100644 --- a/surehub_api/entities/enums.py +++ b/surehub_api/entities/enums.py @@ -84,6 +84,7 @@ class DoorSide(IntEnum): class DoorStatus(IntEnum): + VALUE_0 = 0 VALUE_4 = 4 VALUE_6 = 6 VALUE_8 = 8 diff --git a/surehub_api/routers/households.py b/surehub_api/routers/households.py index 3fc3dfd..829c5ff 100644 --- a/surehub_api/routers/households.py +++ b/surehub_api/routers/households.py @@ -5,7 +5,7 @@ from surehub_api.entities import official from surehub_api.entities.openapi import Tags -from surehub_api.services import households, reports +from surehub_api.services import households, reports, timeline router = APIRouter( prefix="/households", @@ -70,3 +70,9 @@ async def get_devices_of_household(household_id: int) -> List[official.Device]: response_model_exclude_none=True) async def get_device_of_household(household_id: int, device_id: int) -> official.Device: return households.get_device_of_household(household_id, device_id) + + +@router.get("/{household_id}/timeline", + response_model_exclude_none=True) +async def get_timeline_of_household(household_id: int) -> list[official.Timeline]: + return timeline.get_timeline_of_household(household_id) diff --git a/surehub_api/services/timeline.py b/surehub_api/services/timeline.py index a833883..d42f1cb 100644 --- a/surehub_api/services/timeline.py +++ b/surehub_api/services/timeline.py @@ -1,17 +1,17 @@ import math -from typing import Any from fastapi import HTTPException from surehub_api.config import settings +from surehub_api.entities import official from surehub_api.services import api from surehub_api.utils import response_handler -def get_timeline_of_household(household_id: int) -> list[dict[str, Any]]: +def get_timeline_of_household(household_id: int) -> list[official.Timeline]: uri = f"{settings.endpoint}/api/timeline/household/{household_id}" - result = [] + result: list[official.Timeline] = [] fetch_size = 100 response = api.get(uri) @@ -27,6 +27,6 @@ def get_timeline_of_household(household_id: int) -> list[dict[str, Any]]: for i in range(1, request_count + 1): payload = {'page_size': fetch_size, 'page': i} response2 = api.get(uri, params=payload) - result += response_handler.parse(response2) + result += response_handler.parse(response2, model=list[official.Timeline]) return result