defmodule Tai.Commander do use GenServer def start_link(_) do GenServer.start_link(__MODULE__, :ok, name: __MODULE__) end def accounts(options \\ []) do options |> to_dest() |> GenServer.call(:accounts) end def products(options \\ []) do options |> to_dest() |> GenServer.call(:products) end def fees(options \\ []) do options |> to_dest() |> GenServer.call(:fees) end def markets(options \\ []) do options |> to_dest() |> GenServer.call(:markets) end def orders(query \\ nil, options \\ []) do options |> to_dest() |> GenServer.call({:orders, query, options}) end def orders_count(query \\ nil, options \\ []) do options |> to_dest() |> GenServer.call({:orders_count, query}) end def get_order_by_client_id(client_id, options \\ []) do options |> to_dest() |> GenServer.call({:get_order_by_client_id, client_id}) end def get_orders_by_client_ids(client_ids, options \\ []) do options |> to_dest() |> GenServer.call({:get_orders_by_client_ids, client_ids}) end def order_transitions(client_id, query \\ nil, options \\ []) do options |> to_dest() |> GenServer.call({:order_transitions, client_id, query, options}) end def order_transitions_count(client_id, query \\ nil, options \\ []) do options |> to_dest() |> GenServer.call({:order_transitions_count, client_id, query}) end def failed_order_transitions(client_id, query \\ nil, options \\ []) do options |> to_dest() |> GenServer.call({:failed_order_transitions, client_id, query, options}) end def failed_order_transitions_count(client_id, query \\ nil, options \\ []) do options |> to_dest() |> GenServer.call({:failed_order_transitions_count, client_id, query}) end def delete_all_orders(options \\ []) do options |> to_dest() |> GenServer.call(:delete_all_orders, 60_000) end def positions(options \\ []) do options |> to_dest() |> GenServer.call(:positions) end def venues(options \\ []) do options |> to_dest() |> GenServer.call({:venues, options}) end def start_venue(venue_id, options \\ []) do options |> to_dest |> GenServer.call({:start_venue, venue_id, options}) end def stop_venue(venue_id, options \\ []) do options |> to_dest |> GenServer.call({:stop_venue, venue_id, options}) end def fleets(options \\ []) do options |> to_dest |> GenServer.call({:fleets, options}) end def advisors(options \\ []) do options |> to_dest |> GenServer.call({:advisors, options}) end def start_advisors(options \\ []) do options |> to_dest |> GenServer.call({:start_advisors, options}) end def stop_advisors(options \\ []) do options |> to_dest |> GenServer.call({:stop_advisors, options}) end def settings(options \\ []) do options |> to_dest |> GenServer.call(:settings) end def enable_send_orders(options \\ []) do options |> to_dest |> GenServer.call(:enable_send_orders) end def disable_send_orders(options \\ []) do options |> to_dest |> GenServer.call(:disable_send_orders) end def init(state) do {:ok, state} end def handle_call(:accounts, _from, state) do {:reply, Tai.Commander.Accounts.get(), state} end def handle_call(:products, _from, state) do {:reply, Tai.Commander.Products.get(), state} end def handle_call(:fees, _from, state) do {:reply, Tai.Commander.Fees.get(), state} end def handle_call(:markets, _from, state) do {:reply, Tai.Commander.Markets.get(), state} end def handle_call({:orders, query, options}, _from, state) do {:reply, Tai.Commander.Orders.get(query, options), state} end def handle_call({:orders_count, query}, _from, state) do {:reply, Tai.Commander.OrdersCount.get(query), state} end def handle_call({:get_order_by_client_id, client_id}, _from, state) do {:reply, Tai.Commander.GetOrderByClientId.get(client_id), state} end def handle_call({:get_orders_by_client_ids, client_ids}, _from, state) do {:reply, Tai.Commander.GetOrdersByClientIds.get(client_ids), state} end def handle_call({:order_transitions, client_id, query, options}, _from, state) do {:reply, Tai.Commander.OrderTransitions.get(client_id, query, options), state} end def handle_call({:order_transitions_count, client_id, query}, _from, state) do {:reply, Tai.Commander.OrderTransitionsCount.get(client_id, query), state} end def handle_call({:failed_order_transitions, client_id, query, options}, _from, state) do {:reply, Tai.Commander.FailedOrderTransitions.get(client_id, query, options), state} end def handle_call({:failed_order_transitions_count, client_id, query}, _from, state) do {:reply, Tai.Commander.FailedOrderTransitionsCount.get(client_id, query), state} end def handle_call(:delete_all_orders, _from, state) do {:reply, Tai.Commander.DeleteAllOrders.execute(), state} end def handle_call(:positions, _from, state) do {:reply, Tai.Commander.Positions.get(), state} end def handle_call({:venues, options}, _from, state) do {:reply, Tai.Commander.Venues.get(options), state} end def handle_call({:start_venue, venue_id, options}, _from, state) do {:reply, Tai.Commander.StartVenue.execute(venue_id, options), state} end def handle_call({:stop_venue, venue_id, store_id}, _from, state) do {:reply, Tai.Commander.StopVenue.execute(venue_id, store_id), state} end def handle_call({:fleets, options}, _from, state) do {:reply, Tai.Commander.Fleets.get(options), state} end def handle_call({:advisors, options}, _from, state) do {:reply, Tai.Commander.Advisors.get(options), state} end def handle_call({:start_advisors, options}, _from, state) do {:reply, Tai.Commander.StartAdvisors.execute(options), state} end def handle_call({:stop_advisors, options}, _from, state) do {:reply, Tai.Commander.StopAdvisors.execute(options), state} end def handle_call(:settings, _from, state) do {:reply, Tai.Commander.Settings.get(), state} end def handle_call(:enable_send_orders, _from, state) do {:reply, Tai.Commander.EnableSendOrders.execute(), state} end def handle_call(:disable_send_orders, _from, state) do {:reply, Tai.Commander.DisableSendOrders.execute(), state} end defp to_dest(options) do options |> Keyword.get(:node) |> case do nil -> __MODULE__ node -> {__MODULE__, node} end end end