Current section

Files

Jump to
ex_oanda lib models response streaming transactions event.ex
Raw

lib/models/response/streaming/transactions/event.ex

defmodule ExOanda.Response.TransactionEvent do
@moduledoc """
Schema for Oanda streaming transaction response.
"""
use Ecto.Schema
import Ecto.Changeset
import PolymorphicEmbed
alias ExOanda.{
ClientConfigureRejectTransaction,
ClientConfigureTransaction,
CloseTransaction,
CreateTransaction,
DailyFinancingTransaction,
DelayedTradeClosureTransaction,
DividendAdjustmentTransaction,
FixedPriceOrderTransaction,
GuaranteedStopLossOrderRejectTransaction,
GuaranteedStopLossOrderTransaction,
LimitOrderRejectTransaction,
LimitOrderTransaction,
MarginCallEnterTransaction,
MarginCallExitTransaction,
MarginCallExtendTransaction,
MarketIfTouchedOrderRejectTransaction,
MarketIfTouchedOrderTransaction,
MarketOrderRejectTransaction,
MarketOrderTransaction,
OrderCancelRejectTransaction,
OrderCancelTransaction,
OrderClientExtensionsModifyRejectTransaction,
OrderClientExtensionsModifyTransaction,
OrderFillTransaction,
ReopenTransaction,
ResetResettablePLTransaction,
StopLossOrderRejectTransaction,
StopLossOrderTransaction,
TakeProfitOrderRejectTransaction,
TakeProfitOrderTransaction,
TradeClientExtensionsModifyRejectTransaction,
TradeClientExtensionsModifyTransaction,
TrailingStopLossOrderRejectTransaction,
TrailingStopLossOrderTransaction,
TransferFundsRejectTransaction,
TransferFundsTransaction
}
alias ExOanda.Response.TransactionHeartbeat
@primary_key false
@type t :: %__MODULE__{
event: transaction_event()
}
@type transaction_event ::
ExOanda.OrderFillTransaction.t()
| ExOanda.OrderCancelTransaction.t()
| ExOanda.OrderCancelRejectTransaction.t()
| ExOanda.OrderClientExtensionsModifyTransaction.t()
| ExOanda.OrderClientExtensionsModifyRejectTransaction.t()
| ExOanda.CreateTransaction.t()
| ExOanda.CloseTransaction.t()
| ExOanda.ReopenTransaction.t()
| ExOanda.ClientConfigureTransaction.t()
| ExOanda.ClientConfigureRejectTransaction.t()
| ExOanda.TransferFundsTransaction.t()
| ExOanda.TransferFundsRejectTransaction.t()
| ExOanda.MarketOrderTransaction.t()
| ExOanda.MarketOrderRejectTransaction.t()
| ExOanda.FixedPriceOrderTransaction.t()
| ExOanda.LimitOrderTransaction.t()
| ExOanda.LimitOrderRejectTransaction.t()
| ExOanda.StopLossOrderTransaction.t()
| ExOanda.StopLossOrderRejectTransaction.t()
| ExOanda.MarketIfTouchedOrderTransaction.t()
| ExOanda.MarketIfTouchedOrderRejectTransaction.t()
| ExOanda.TakeProfitOrderTransaction.t()
| ExOanda.TakeProfitOrderRejectTransaction.t()
| ExOanda.GuaranteedStopLossOrderTransaction.t()
| ExOanda.GuaranteedStopLossOrderRejectTransaction.t()
| ExOanda.TrailingStopLossOrderTransaction.t()
| ExOanda.TrailingStopLossOrderRejectTransaction.t()
| ExOanda.TradeClientExtensionsModifyTransaction.t()
| ExOanda.TradeClientExtensionsModifyRejectTransaction.t()
| ExOanda.MarginCallEnterTransaction.t()
| ExOanda.MarginCallExtendTransaction.t()
| ExOanda.MarginCallExitTransaction.t()
| ExOanda.DelayedTradeClosureTransaction.t()
| ExOanda.DailyFinancingTransaction.t()
| ExOanda.DividendAdjustmentTransaction.t()
| ExOanda.ResetResettablePLTransaction.t()
| ExOanda.Response.TransactionHeartbeat.t()
embedded_schema do
polymorphic_embeds_one(:event,
types: [
ORDER_FILL: OrderFillTransaction,
ORDER_CANCEL: OrderCancelTransaction,
ORDER_CANCEL_REJECT: OrderCancelRejectTransaction,
ORDER_CLIENT_EXTENSIONS_MODIFY: OrderClientExtensionsModifyTransaction,
ORDER_CLIENT_EXTENSIONS_MODIFY_REJECT: OrderClientExtensionsModifyRejectTransaction,
CREATE: CreateTransaction,
CLOSE: CloseTransaction,
REOPEN: ReopenTransaction,
CLIENT_CONFIGURE: ClientConfigureTransaction,
CLIENT_CONFIGURE_REJECT: ClientConfigureRejectTransaction,
TRANSFER_FUNDS: TransferFundsTransaction,
TRANSFER_FUNDS_REJECT: TransferFundsRejectTransaction,
MARKET_ORDER: MarketOrderTransaction,
MARKET_ORDER_REJECT: MarketOrderRejectTransaction,
FIXED_PRICE_ORDER: FixedPriceOrderTransaction,
LIMIT_ORDER: LimitOrderTransaction,
LIMIT_ORDER_REJECT: LimitOrderRejectTransaction,
STOP_ORDER: StopLossOrderTransaction,
STOP_ORDER_REJECT: StopLossOrderRejectTransaction,
MARKET_IF_TOUCHED_ORDER: MarketIfTouchedOrderTransaction,
MARKET_IF_TOUCHED_ORDER_REJECT: MarketIfTouchedOrderRejectTransaction,
TAKE_PROFIT_ORDER: TakeProfitOrderTransaction,
TAKE_PROFIT_ORDER_REJECT: TakeProfitOrderRejectTransaction,
GUARANTEED_STOP_LOSS_ORDER: GuaranteedStopLossOrderTransaction,
GUARANTEED_STOP_LOSS_ORDER_REJECT: GuaranteedStopLossOrderRejectTransaction,
TRAILING_STOP_LOSS_ORDER: TrailingStopLossOrderTransaction,
TRAILING_STOP_LOSS_ORDER_REJECT: TrailingStopLossOrderRejectTransaction,
TRADE_CLIENT_EXTENSIONS_MODIFY: TradeClientExtensionsModifyTransaction,
TRADE_CLIENT_EXTENSIONS_MODIFY_REJECT: TradeClientExtensionsModifyRejectTransaction,
MARGIN_CALL_ENTER: MarginCallEnterTransaction,
MARGIN_CALL_EXTEND: MarginCallExtendTransaction,
MARGIN_CALL_EXIT: MarginCallExitTransaction,
DELAYED_TRADE_CLOSURE: DelayedTradeClosureTransaction,
DAILY_FINANCING: DailyFinancingTransaction,
DIVIDEND_ADJUSTMENT: DividendAdjustmentTransaction,
RESET_RESETTABLE_PL: ResetResettablePLTransaction,
HEARTBEAT: TransactionHeartbeat
],
type_field_name: :type,
on_type_not_found: :raise,
on_replace: :update
)
end
@doc false
def changeset(struct, params) do
struct
|> cast(params, [])
|> cast_polymorphic_embed(:event)
end
end