lib/ex_kucoin/market/order_book.ex

defmodule ExKucoin.Market.OrderBook do
  @moduledoc """
  Retrieves order books [API Docs](https://docs.kucoin.com/#get-part-order-book-aggregated)
  """
  import ExKucoin.Api.Public

  @type pair :: String.t()
  @type depth :: 20 | 100 | nil

  @doc """
  Retrieve Level 2 order book data

  Aggregation support is only for 20 and 100

  # Examples

  ## Full Order Book

    iex> ExKucoin.Market.OrderBook.level2("BTC-USDT")
    %{
      "sequence" => "3262786978",
      "time" => 1_550_653_727_731,
      "bids" => [["6500.12", "0.45054140"], ["6500.11", "0.45054140"]],
      "asks" => [["6500.16", "0.57753524"], ["6500.15", "0.57753524"]]
    }

  ## Aggregated Order Book (20)

    iex> ExKucoin.Market.OrderBook.level2("BTC-USDT", 20)
    %{
      "sequence" => "3262786978",
      "time" => 1_550_653_727_731,
      "bids" => [["6500.12", "0.45054140"], ["6500.11", "0.45054140"]],
      "asks" => [["6500.16", "0.57753524"], ["6500.15", "0.57753524"]]
    }

  ## Aggregated Order Book (100)

    iex> ExKucoin.Market.OrderBook.level2("BTC-USDT", 100)
    %{
      "sequence" => "3262786978",
      "time" => 1_550_653_727_731,
      "bids" => [["6500.12", "0.45054140"], ["6500.11", "0.45054140"]],
      "asks" => [["6500.16", "0.57753524"], ["6500.15", "0.57753524"]]
    }


  """
  @spec level2(pair, depth) :: {:ok, map} | {:error, any}
  def level2(pair, depth \\ nil, config \\ nil) do
    case depth do
      20 -> "/api/v1/market/orderbook/level2_20"
      100 -> "/api/v1/market/orderbook/level2_100"
      _ -> "/api/v2/market/orderbook/level2"
    end
    |> get(%{symbol: pair}, config)
  end
end