lib/statestores/schemas/lookup.ex

defmodule Statestores.Schemas.Lookup do
  @moduledoc """
  Lookup schema
  """
  use Ecto.Schema

  import Ecto.Changeset

  @type t() :: %__MODULE__{}

  @primary_key false
  schema "lookups" do
    field(:id, :integer, primary_key: true)

    field(:node, :string, primary_key: true)

    field(:actor, :string)

    field(:system, :string)

    field(:data, Statestores.Types.Binary)

    timestamps(type: :utc_datetime_usec)
  end

  @spec changeset(%__MODULE__{}, map()) :: Ecto.Changeset.t() | {:error, Ecto.Changeset.t()}
  def changeset(event, attrs \\ %{}) do
    event
    |> cast(attrs, [:id, :node, :actor, :system, :data])
    |> validate_required([:id, :node, :actor, :system])
    |> case do
      %{valid?: false, changes: changes} = changeset when changes == %{} ->
        %{changeset | action: :ignore}

      changeset ->
        changeset
    end
  end
end