lib/baz/collection_events/collection_event.ex

defmodule Baz.CollectionEvents.CollectionEvent do
  @moduledoc """
  CollectionEvent resource
  """

  use Ecto.Schema
  import Ecto.Changeset

  @type t :: Ecto.Schema.t()

  @primary_key false

  schema "collection_events" do
    field(:event_timestamp, :utc_datetime_usec)

    field(:event_type, Ecto.Enum,
      values: [
        :item_listed,
        :item_sold,
        :item_transferred,
        :item_metadata_update,
        :item_canceled,
        :item_received_offer,
        :item_received_bid,
        :bid_entered,
        :bid_withdrawn,
        :cancelled,
        :collection_offer,
        :created,
        :offer_entered,
        :successful,
        :trait_offer,
        :transfer
      ]
    )

    field(:venue, :string)
    field(:slug, :string)
    field(:token_id, :string)
    field(:source_id, :string)

    timestamps()
  end

  @doc false
  def changeset(collection, attrs) do
    collection
    |> cast(attrs, [
      :event_timestamp,
      :event_type,
      :source_id,
      :slug,
      :token_id,
      :venue
    ])
    |> validate_required([
      :event_timestamp,
      :event_type,
      :source_id,
      :slug,
      :venue
    ])
    |> unique_constraint(([:event_timestamp, :event_type, :source_id, :slug, :token_id, :venue ]))
  end
end