lib/baz/collection_assets/collection_asset.ex

defmodule Baz.CollectionAssets.CollectionAsset do
  @moduledoc """
  CollectionAsset resource
  """

  use Ecto.Schema
  import Ecto.Changeset

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

  @primary_key {:id, Ecto.UUID, autogenerate: true}

  schema "collection_assets" do
    field(:venue, :string)
    field(:slug, :string)
    field(:token_id, :string)
    field(:name, :string)
    field(:description, :string)
    field(:background_color, :string)
    field(:image_uri, :string)
    field(:image_preview_uri, :string)
    field(:image_thumbnail_uri, :string)
    field(:image_original_uri, :string)
    field(:animation_uri, :string)
    field(:animation_original_uri, :string)
    field(:is_nsfw, :boolean)
    # Interesting extra information from OS API
    # permalink: String.t(),
    # external_link: String.t(),
    # asset_contract: map,
    # collection: String.t(),
    # is_nsfw: boolean,
    # decimals: non_neg_integer | nil,
    # token_metadata: String.t(),
    # creator: map,
    # traits: [map],
    # is_presale: boolean,
    # transfer_fee_payment_token: term | nil,
    # transfer_fee: term | nil,
    # related_assets: list,
    # auctions: list,
    # supports_wyvern: boolean,

    timestamps()
  end

  @doc false
  def changeset(collection, attrs) do
    collection
    |> cast(attrs, [
      :venue,
      :slug,
      :token_id,
      :name,
      :description,
      :background_color,
      :image_uri,
      :image_preview_uri,
      :image_thumbnail_uri,
      :image_original_uri,
      :animation_uri,
      :animation_original_uri,
      :is_nsfw
    ])
    |> validate_required([:venue, :slug, :token_id])
    |> unique_constraint([:venue, :slug, :token_id])
  end
end