lib/line_drive/activity_types.ex

defmodule LineDrive.ActivityTypes do
  @moduledoc """
  This module encapsulates calls to the pipedrive activity_types resource API
  """
  use Tesla

  alias LineDrive.ActivityType

  alias Tesla.Client

  @callback list_activity_types(Client.t()) :: {:ok, ActivityType.t()}

  def list_activity_types(%Client{} = client) do
    client
    |> get("/api/v1/activityTypes")
    |> case do
      {:ok, %Tesla.Env{status: 200, body: %{data: activity_type_data}}} ->
        activity_types =
          activity_type_data
          |> Enum.map(&ActivityType.new/1)

        {:ok, activity_types}

      {:error, env} ->
        {:error, env}
    end
  end
end