33 lines
899 B
Python
33 lines
899 B
Python
"""Normalized player event models for the V2 event pipeline foundation."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import asdict, dataclass
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class PlayerEventRecord:
|
|
"""Minimal normalized player event contract reused across source and storage."""
|
|
|
|
event_id: str
|
|
event_type: str
|
|
occurred_at: str | None
|
|
server_slug: str
|
|
external_match_id: str
|
|
source_kind: str
|
|
source_ref: str | None
|
|
raw_event_ref: str | None
|
|
killer_player_key: str | None
|
|
killer_display_name: str | None
|
|
victim_player_key: str | None
|
|
victim_display_name: str | None
|
|
weapon_name: str | None
|
|
weapon_category: str | None
|
|
kill_category: str | None
|
|
is_teamkill: bool
|
|
event_value: int = 1
|
|
|
|
def to_dict(self) -> dict[str, object]:
|
|
"""Return the event as a plain dictionary."""
|
|
return asdict(self)
|