(p)repair is a project to help people reduce their consumption of products. Firstly, we bet on building a mobile application. You can read more in the project’s manifesto.

This article is part of the Migration to Ash series. Click for the summary, or just pick what you want here!


For more context, read our previous article: What strategy to migrate from Phoenix to Ash?

First of all, we need to add Ash to our dependencies, and an extension to manage the data layer. Since we are using a postgresql database, we need AshPostgres. No need for other extensions for now so we don’t install them before we need them.

Note that (p)repair is our project name. It is translated to prepair in file names, and to Prepair in module names.

### inside mix.exs file

defp deps do
    [
      # Project dependencies
      {:ash, "~> 3.0"},
      {:ash_postgres, "~> 2.0"},
      []
    ]
end

At this step, we can run mix deps.get and then mix deps.compile.

Everything is fine.

Now we can add these new dependencies to the formatter.exs file.

### inside formatter.exs file

[
  import_deps: [
    :ash,
    :ash_postgres,
    []
  ],
  plugins: [, Spark.Formatter],
  []
]

And we can modify our lib/prepair/repo.ex file, to replace :

### old version

defmodule Prepair.Repo do
  @moduledoc false

  use Ecto.Repo,
    otp_app: :prepair,
    adapter: Ecto.Adapters.Postgres
end
### new version supporting AshPostgres

defmodule Prepair.Repo do
  @moduledoc false

  use AshPostgres.Repo,
    otp_app: :prepair

  def installed_extensions do
    ["ash-functions"]
  end
end

It should remain fully compatible for all our application interactions with the database, since AshPostgres is using Ecto under the hood, so every Ecto functions used in our code remain valid.

We verify it with a classic:

mix test

And that’s all for this step!

Easy, no? It worth a commit 😃

Read our next article: Preparation for the migration from Phoenix to Ash


Guillaume, from the (p)repair team