lib/open_rtb_ecto/v2/native/request.ex

defmodule OpenRtbEcto.V2.Native.Request do
  @moduledoc """
  The Native Object defines the native advertising opportunity available for bid via this bid request.
  """

  use Ecto.Schema
  import Ecto.Changeset
  alias OpenRtbEcto.V2.Native.Request.{Asset, EventTracker}

  @type t :: %__MODULE__{}

  embedded_schema do
    field(:ver, :string, default: "1.2")
    field(:context, :integer)
    field(:contextsubtype, :integer)
    field(:plcmttype, :integer)
    field(:plcmtcnt, :integer, default: 1)
    field(:seq, :integer, default: 0)
    embeds_many(:assets, Asset)
    field(:aurlsupport, :integer, default: 0)
    field(:durlsupport, :integer, default: 0)
    embeds_many(:eventtrackers, EventTracker)
    field(:privacy, :integer, default: 0)
    field(:ext, :map, default: %{})
  end

  def changeset(request, attrs \\ %{}) do
    request
    |> cast(attrs, [
      :ver,
      :context,
      :contextsubtype,
      :plcmttype,
      :plcmtcnt,
      :seq,
      :aurlsupport,
      :durlsupport,
      :privacy,
      :ext
    ])
    |> cast_embed(:assets, required: true)
    |> cast_embed(:eventtrackers)
  end
end