lib/broadcast_id_migration.ex

defmodule PostgrexPubsubMultiTenant.BroadcastIdMigration do
  @moduledoc """
  A macro for applying mutation broadcast triggers to tables
  """

  defmacro __using__(opts) do
    table_name =
      opts
      |> Map.new()
      |> Map.get(:table_name)

    prefix =
      opts
      |> Map.new()
      |> Map.get(:prefix, "public")

    columns =
      opts
      |> Map.new()
      |> Map.get(:columns)

    quote do
      use Ecto.Migration

      def up do
        PostgrexPubsubMultiTenant.IdStrategy.broadcast_mutation_for_table(
          unquote(table_name),
          unquote(prefix),
          unquote(columns)
        )
      end

      def down do
        PostgrexPubsubMultiTenant.IdStrategy.delete_broadcast_trigger_for_table(
          unquote(table_name),
          unquote(prefix)
        )
      end
    end
  end
end