lib/statestores/migrator/migrator.ex

defmodule Statestores.Migrator do
  @moduledoc """
  Run database migrations
  """
  import Statestores.Util, only: [load_app: 0]

  def migrate(adapter) do
    load_app()

    if adapter not in [
         Statestores.Adapters.NativeSnapshotAdapter,
         Statestores.Adapters.NativeLookupAdapter
       ] do
      {:ok, _, _} = Ecto.Migrator.with_repo(adapter, &Ecto.Migrator.run(&1, :up, all: true))
    end
  end

  @spec rollback(any, any) :: {:ok, any, any}
  def rollback(adapter, version) do
    load_app()

    if adapter not in [
         Statestores.Adapters.NativeSnapshotAdapter,
         Statestores.Adapters.NativeLookupAdapter
       ] do
      {:ok, _, _} = Ecto.Migrator.with_repo(adapter, &Ecto.Migrator.run(&1, :down, to: version))
    end
  end
end