Packages
tai
0.0.70
0.0.75
0.0.74
0.0.73
0.0.72
0.0.71
0.0.70
0.0.69
0.0.68
0.0.67
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.57
0.0.56
0.0.55
0.0.54
0.0.53
0.0.52
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A composable, real time, market data and trade execution toolkit
Current section
Files
Jump to
Current section
Files
lib/tai/orders/services/enqueue_order.ex
defmodule Tai.Orders.Services.EnqueueOrder do
alias Tai.Orders.{
Order,
OrderCallback,
OrderCallbackStore,
OrderRepo,
Services,
SubmissionFactory
}
@type submission :: term
@type order :: Order.t()
@spec call(submission) :: {:ok, order} | {:error, Ecto.Changeset.t() | :no_proc}
def call(submission) do
with {:ok, order} = order_result <- insert_order(submission),
:ok <- store_callback(submission, order),
:ok <- execute_callback(order) do
order_result
end
end
defp insert_order(submission) do
submission
|> SubmissionFactory.order_changeset()
|> OrderRepo.insert()
end
defp store_callback(%_{order_updated_callback: nil}, _order), do: :ok
defp store_callback(submission, order) do
{:ok, _} =
OrderCallbackStore.put(%OrderCallback{
client_id: order.client_id,
callback: submission.order_updated_callback
})
:ok
end
defp execute_callback(order) do
Services.ExecuteOrderCallback.call(nil, order, nil)
end
end