Packages
tai
0.0.9
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/exchanges/boot/products.ex
defmodule Tai.Exchanges.Boot.Products do
@type adapter :: Tai.Exchanges.Adapter.t()
@type product :: Tai.Exchanges.Product.t()
@spec hydrate(adapter :: adapter) ::
{:ok, filtered_products :: [product]} | {:error, reason :: term}
def hydrate(adapter) do
with {:ok, all_products} <- Tai.Exchanges.Exchange.products(adapter) do
filtered_products = filter(all_products, adapter.products)
Enum.each(filtered_products, &Tai.Exchanges.ProductStore.upsert/1)
:ok =
Tai.Events.broadcast(%Tai.Events.HydrateProducts{
venue_id: adapter.id,
total: all_products |> Enum.count(),
filtered: filtered_products |> Enum.count()
})
{:ok, filtered_products}
else
{:error, _} = error -> error
end
end
def filter(all_products, filters) do
all_products
|> Enum.reduce(
%{},
fn p, acc -> Map.put(acc, p.symbol, p) end
)
|> Juice.squeeze(filters)
|> Map.values()
end
end