defmodule AccessGrid.Event do @moduledoc """ Represents a template activity log event. Events are returned by `AccessGrid.Console.get_logs/2` and capture actions taken on templates and access passes. """ @type t :: %__MODULE__{ id: String.t() | integer() | nil, event: String.t() | nil, created_at: String.t() | nil, ip_address: String.t() | nil, user_agent: String.t() | nil, metadata: map() } defstruct [ :id, :event, :created_at, :ip_address, :user_agent, metadata: %{} ] @doc """ Creates an Event struct from an API response map. """ @spec from_response(map()) :: t() def from_response(data) when is_map(data) do %__MODULE__{ id: data["id"], event: data["event"], created_at: data["created_at"], ip_address: data["ip_address"], user_agent: data["user_agent"], metadata: data["metadata"] || %{} } end end