File size: 1,228 Bytes
d05aa4a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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"))