lib/auth0/entity/user.ex

defmodule Auth0.Entity.User do
  @moduledoc """
  Documentation for entity of User.

  """

  alias Auth0.Common.Util
  alias Auth0.Entity.Identity

  defstruct user_id: nil,
            email: nil,
            email_verified: nil,
            username: nil,
            phone_number: nil,
            phone_verified: nil,
            created_at: nil,
            updated_at: nil,
            identities: nil,
            app_metadata: nil,
            user_metadata: nil,
            picture: nil,
            name: nil,
            nickname: nil,
            multifactor: nil,
            last_ip: nil,
            last_login: nil,
            logins_count: nil,
            blocked: nil,
            given_name: nil,
            family_name: nil

  @type t :: %__MODULE__{
          user_id: String.t(),
          email: String.t(),
          email_verified: boolean,
          username: String.t(),
          phone_number: String.t(),
          phone_verified: boolean,
          created_at: String.t(),
          updated_at: String.t(),
          identities: list(Identity.t()),
          app_metadata: map,
          user_metadata: map,
          picture: String.t(),
          name: String.t(),
          nickname: String.t(),
          multifactor: list(String.t()),
          last_ip: String.t(),
          last_login: String.t(),
          logins_count: integer,
          blocked: boolean,
          given_name: String.t(),
          family_name: String.t()
        }

  @spec from(map) :: __MODULE__.t()
  def from(value) do
    user = value |> Util.to_struct(__MODULE__)

    if user.identities |> is_list do
      %{user | identities: user.identities |> Enum.map(&Identity.from/1)}
    else
      user
    end
  end
end