| from typing import TypedDict, List | |
| class DoorSummary(TypedDict): | |
| total_events: int | |
| opened_count: int | |
| closed_count: int | |
| locked_count: int | |
| unlocked_count: int | |
| def summarize_door_events(events: List[dict], door_id: str) -> DoorSummary: | |
| """Summarize events for a single door_id.""" | |
| opened = closed = locked = unlocked = 0 | |
| for e in events: | |
| if str(e.get("door_id")) != door_id: | |
| continue | |
| etype = str(e.get("event_type", "")).lower() | |
| if etype == "opened": | |
| opened += 1 | |
| elif etype == "closed": | |
| closed += 1 | |
| elif etype == "locked": | |
| locked += 1 | |
| elif etype == "unlocked": | |
| unlocked += 1 | |
| total = opened + closed + locked + unlocked | |
| return { | |
| "total_events": total, | |
| "opened_count": opened, | |
| "closed_count": closed, | |
| "locked_count": locked, | |
| "unlocked_count": unlocked, | |
| } | |
| if __name__ == "__main__": | |
| events = [ | |
| {"door_id": "front_door", "event_type": "opened"}, | |
| {"door_id": "front_door", "event_type": "closed"}, | |
| {"door_id": "front_door", "event_type": "locked"}, | |
| ] | |
| print(summarize_door_events(events, "front_door")) | |