Skip to main content

lib/access_grid/event.ex

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