lib/history/trades/trade_history_chunk.ex

defmodule History.Trades.TradeHistoryChunk do
  use Ecto.Schema
  import Ecto.Changeset
  alias History.Trades

  schema "trade_history_chunks" do
    field(:venue, :string)
    field(:product, :string)
    field(:start_at, :utc_datetime)
    field(:end_at, :utc_datetime)
    field(:status, History.ChunkStatusType)
    belongs_to(:job, Trades.TradeHistoryJob)

    timestamps()
  end

  @doc false
  def changeset(chunk, attrs) do
    chunk
    |> cast(attrs, [:venue, :product, :start_at, :end_at, :status])
    |> validate_required([:venue, :product, :start_at, :end_at, :status])
    |> assoc_constraint(:job)
    |> unique_constraint([:venue, :product, :job_id, :start_at, :end_at])
  end
end