Skip to main content

lib/keplars/contacts.ex

defmodule Keplars.Contacts do
  @moduledoc false

  alias Keplars.Http

  def add(client, params) do
    Http.request(client, :post, "/contacts", params)
  end

  def get(client, email) do
    Http.request(client, :get, "/contacts/#{URI.encode(email)}")
  end

  def list(client, opts \\ []) do
    query = build_query(opts, [:audience_id, :page, :limit])
    Http.request(client, :get, "/contacts#{query}")
  end

  def update(client, email, params) do
    Http.request(client, :put, "/contacts/#{URI.encode(email)}", params)
  end

  def delete(client, email) do
    Http.request(client, :delete, "/contacts/#{URI.encode(email)}")
  end

  defp build_query(opts, keys) do
    params =
      keys
      |> Enum.reduce(%{}, fn key, acc ->
        case Keyword.get(opts, key) do
          nil -> acc
          value -> Map.put(acc, key, value)
        end
      end)

    if map_size(params) == 0 do
      ""
    else
      "?" <> URI.encode_query(params)
    end
  end
end