Current section

Files

Jump to
ex_oanda lib models definitions account account_changes.ex
Raw

lib/models/definitions/account/account_changes.ex

defmodule ExOanda.AccountChanges do
@moduledoc """
Schema for Oanda account changes.
[Oanda Docs](https://developer.oanda.com/rest-live-v20/account-df/)
"""
use TypedEctoSchema
import Ecto.Changeset
import PolymorphicEmbed
alias ExOanda.{
ClientConfigureRejectTransaction,
ClientConfigureTransaction,
DailyFinancingTransaction,
DelayedTradeClosureTransaction,
DividendAdjustmentTransaction,
FixedPriceOrderTransaction,
GuaranteedStopLossOrderRejectTransaction,
GuaranteedStopLossOrderTransaction,
LimitOrderRejectTransaction,
LimitOrderTransaction,
MarginCallEnterTransaction,
MarginCallExitTransaction,
MarginCallExtendTransaction,
MarketIfTouchedOrderRejectTransaction,
MarketIfTouchedOrderTransaction,
MarketOrderRejectTransaction,
MarketOrderTransaction,
Order,
OrderCancelRejectTransaction,
OrderCancelTransaction,
OrderClientExtensionsModifyRejectTransaction,
OrderClientExtensionsModifyTransaction,
OrderFillTransaction,
OrderRejectTransaction,
Position,
ResetResettablePLTransaction,
StopLossOrderRejectTransaction,
StopLossOrderTransaction,
TakeProfitOrderRejectTransaction,
TakeProfitOrderTransaction,
TradeClientExtensionsModifyRejectTransaction,
TradeClientExtensionsModifyTransaction,
TradeSummary,
TrailingStopLossOrderRejectTransaction,
TrailingStopLossOrderTransaction,
TransferFundsRejectTransaction,
TransferFundsTransaction
}
@primary_key false
typed_embedded_schema do
embeds_many(:orders_created, Order)
embeds_many(:orders_cancelled, Order)
embeds_many(:orders_filled, Order)
embeds_many(:orders_triggered, Order)
embeds_many(:trades_opened, TradeSummary)
embeds_many(:trades_reduced, TradeSummary)
embeds_many(:trades_closed, TradeSummary)
embeds_many(:positions, Position)
polymorphic_embeds_many(:transactions,
types: [
CLIENT_CONFIGURE: ClientConfigureTransaction,
CLIENT_CONFIGURE_REJECT: ClientConfigureRejectTransaction,
DAILY_FINANCING: DailyFinancingTransaction,
DELAYED_TRADE_CLOSURE: DelayedTradeClosureTransaction,
DIVIDEND_ADJUSTMENT: DividendAdjustmentTransaction,
FIXED_PRICE_ORDER: FixedPriceOrderTransaction,
GUARANTEED_STOP_LOSS_ORDER: GuaranteedStopLossOrderTransaction,
GUARANTEED_STOP_LOSS_ORDER_REJECT: GuaranteedStopLossOrderRejectTransaction,
LIMIT_ORDER: LimitOrderTransaction,
LIMIT_ORDER_REJECT: LimitOrderRejectTransaction,
MARGIN_CALL_ENTER: MarginCallEnterTransaction,
MARGIN_CALL_EXTEND: MarginCallExtendTransaction,
MARGIN_CALL_EXIT: MarginCallExitTransaction,
MARKET_IF_TOUCHED_ORDER: MarketIfTouchedOrderTransaction,
MARKET_IF_TOUCHED_ORDER_REJECT: MarketIfTouchedOrderRejectTransaction,
MARKET_ORDER: MarketOrderTransaction,
MARKET_ORDER_REJECT: MarketOrderRejectTransaction,
ORDER_CANCEL: OrderCancelTransaction,
ORDER_CANCEL_REJECT: OrderCancelRejectTransaction,
ORDER_CLIENT_EXTENSIONS_MODIFY: OrderClientExtensionsModifyTransaction,
ORDER_CLIENT_EXTENSIONS_MODIFY_REJECT: OrderClientExtensionsModifyRejectTransaction,
ORDER_FILL: OrderFillTransaction,
ORDER_REJECT: OrderRejectTransaction,
RESET_RESETTABLE_PL: ResetResettablePLTransaction,
STOP_LOSS_ORDER: StopLossOrderTransaction,
STOP_LOSS_ORDER_REJECT: StopLossOrderRejectTransaction,
TAKE_PROFIT_ORDER: TakeProfitOrderTransaction,
TAKE_PROFIT_ORDER_REJECT: TakeProfitOrderRejectTransaction,
TRADE_CLIENT_EXTENSIONS_MODIFY: TradeClientExtensionsModifyTransaction,
TRADE_CLIENT_EXTENSIONS_MODIFY_REJECT: TradeClientExtensionsModifyRejectTransaction,
TRAILING_STOP_LOSS_ORDER: TrailingStopLossOrderTransaction,
TRAILING_STOP_LOSS_ORDER_REJECT: TrailingStopLossOrderRejectTransaction,
TRANSFER_FUNDS: TransferFundsTransaction,
TRANSFER_FUNDS_REJECT: TransferFundsRejectTransaction
],
on_type_not_found: :raise,
on_replace: :delete,
type_field_name: :type
)
end
@doc false
def changeset(struct, params) do
struct
|> cast(params, [])
|> cast_embed(:orders_created)
|> cast_embed(:orders_cancelled)
|> cast_embed(:orders_filled)
|> cast_embed(:orders_triggered)
|> cast_embed(:trades_opened)
|> cast_embed(:trades_reduced)
|> cast_embed(:trades_closed)
|> cast_embed(:positions)
|> cast_polymorphic_embed(:transactions)
end
end