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