Current section
Files
Jump to
Current section
Files
lib/models/response/positions/close_position.ex
defmodule ExOanda.Response.ClosePosition do
@moduledoc """
Schema for Oanda close position response.
[Oanda Docs](https://developer.oanda.com/rest-live-v20/position-ep/)
"""
use TypedEctoSchema
import Ecto.Changeset
alias ExOanda.{
MarketOrderRejectTransaction,
MarketOrderTransaction,
OrderCancelTransaction,
OrderFillTransaction
}
@primary_key false
typed_embedded_schema do
field(:related_transaction_ids, {:array, :string})
field(:last_transaction_id, :string)
embeds_one :long_order_create_transaction, MarketOrderTransaction
embeds_one :long_order_fill_transaction, OrderFillTransaction
embeds_one :long_order_cancel_transaction, OrderCancelTransaction
embeds_one :short_order_create_transaction, MarketOrderTransaction
embeds_one :short_order_fill_transaction, OrderFillTransaction
embeds_one :short_order_cancel_transaction, OrderCancelTransaction
embeds_one :long_order_reject_transaction, MarketOrderRejectTransaction
embeds_one :short_order_reject_transaction, MarketOrderRejectTransaction
end
@doc false
def changeset(struct, params) do
struct
|> cast(params, [:related_transaction_ids, :last_transaction_id])
|> cast_embed(:long_order_create_transaction)
|> cast_embed(:long_order_fill_transaction)
|> cast_embed(:long_order_cancel_transaction)
|> cast_embed(:short_order_create_transaction)
|> cast_embed(:short_order_fill_transaction)
|> cast_embed(:short_order_cancel_transaction)
|> cast_embed(:long_order_reject_transaction)
|> cast_embed(:short_order_reject_transaction)
end
end