Skip to main content

lib/access_grid/hid_org.ex

defmodule AccessGrid.HidOrg do
  @moduledoc """
  HID Origo organization registered to the account. Returned by
  `AccessGrid.Console.list_hid_orgs/1`, `AccessGrid.Console.create_hid_org/2`,
  and `AccessGrid.Console.activate_hid_org/2`.

  The activate endpoint (`activate_hid_org/2`) may return extra fields like
  `already_completed: true` or `job_queued: true` to indicate state — those are
  not surfaced on this struct. Use `org.status` to determine activation state.
  """

  @type t :: %__MODULE__{
          id: String.t() | nil,
          name: String.t() | nil,
          slug: String.t() | nil,
          first_name: String.t() | nil,
          last_name: String.t() | nil,
          phone: String.t() | nil,
          full_address: String.t() | nil,
          status: String.t() | nil,
          created_at: String.t() | nil
        }

  defstruct [
    :id,
    :name,
    :slug,
    :first_name,
    :last_name,
    :phone,
    :full_address,
    :status,
    :created_at
  ]

  @doc """
  Creates a HidOrg struct from an API response map.
  """
  @spec from_response(map()) :: t()
  def from_response(data) when is_map(data) do
    %__MODULE__{
      id: data["id"],
      name: data["name"],
      slug: data["slug"],
      first_name: data["first_name"],
      last_name: data["last_name"],
      phone: data["phone"],
      full_address: data["full_address"],
      status: data["status"],
      created_at: data["created_at"]
    }
  end
end