lib/carbonite/trigger.ex

# SPDX-License-Identifier: Apache-2.0

defmodule Carbonite.Trigger do
  @moduledoc """
  A `Carbonite.Trigger` stores per table configuration for the change capture trigger.
  """

  @moduledoc since: "0.1.0"

  use Carbonite.Schema

  @primary_key {:id, :id, autogenerate: true}

  @type id :: non_neg_integer()
  @type mode :: :capture | :ignore

  @type t :: %__MODULE__{
          id: id(),
          table_name: String.t(),
          table_prefix: String.t(),
          primary_key_columns: [String.t()],
          excluded_columns: [String.t()],
          filtered_columns: [String.t()],
          store_changed_from: boolean(),
          mode: mode(),
          override_xact_id: nil | non_neg_integer(),
          inserted_at: DateTime.t(),
          updated_at: DateTime.t()
        }

  schema "triggers" do
    field(:table_prefix, :string)
    field(:table_name, :string)
    field(:primary_key_columns, {:array, :string})
    field(:excluded_columns, {:array, :string})
    field(:filtered_columns, {:array, :string})
    field(:store_changed_from, :boolean)
    field(:mode, Ecto.Enum, values: [:capture, :ignore])
    field(:override_xact_id, :integer)

    timestamps()
  end
end