lib/helium_elixir.ex

defmodule HeliumElixir do
  @moduledoc """
  Documentation for HeliumElixir.
  """
  alias HeliumElixir.BlockchainApi
  alias HeliumElixir.BlockchainApi.BlockchainRequestConfig
  alias HeliumElixir.BlockchainApi.TakeMinConfig
  alias HeliumElixir.RequestConfig

  defp appendPath(%RequestConfig{base_url: base_url, headers: headers}, path) do
    %BlockchainRequestConfig{base_url: base_url, headers: headers, path: path}
  end

  def account(%RequestConfig{} = config, address) do
    appendPath(config, "/accounts/#{address}")
    |> BlockchainApi.get_json()
  end

  def account_activity(%RequestConfig{} = config, %{
        address: address,
        cursor: cursor,
        count: count
      }) do
    appendPath(config, "/accounts/#{address}/activity")
    |> BlockchainApi.take_min(%TakeMinConfig{
      cursor: cursor,
      min_count: count
    })
  end

  def rewards_sum(%RequestConfig{} = config, %{
        address: address,
        min_time: min_time,
        max_time: max_time
      }) do
    appendPath(config, "/accounts/#{address}/rewards/sum")
    |> BlockchainApi.get_json(%{
      min_time: min_time,
      max_time: max_time
    })
  end

  def submit_transaction(%RequestConfig{} = config, txn) do
    appendPath(config, "/pending_transactions") |> BlockchainApi.post_json(%{"txn" => txn})
  end
end