lib/tai/orders/transitions/reject.ex

defmodule Tai.Orders.Transitions.Reject do
  @moduledoc """
  The order was not accepted by the venue. It most likely didn't pass the
  venue's validation criteria.
  """

  use Ecto.Schema
  import Ecto.Changeset

  @behaviour Tai.Orders.Transition

  @type t :: %__MODULE__{}

  @primary_key false

  embedded_schema do
    field(:venue_order_id, :string)
    field(:last_received_at, :utc_datetime_usec)
    field(:last_venue_timestamp, :utc_datetime_usec)
  end

  def changeset(transition, params) do
    transition
    |> cast(params, [:venue_order_id, :last_received_at, :last_venue_timestamp])
    |> validate_required([:venue_order_id, :last_received_at])
  end

  def from, do: ~w[enqueued]a

  def attrs(transition) do
    [
      venue_order_id: transition.venue_order_id,
      leaves_qty: Decimal.new(0),
      last_received_at: transition.last_received_at,
      last_venue_timestamp: transition.last_venue_timestamp
    ]
  end

  def status(_current) do
    :rejected
  end
end