defmodule Pleroma.Repo.Migrations.AddFollowerAddressToUser do
  use Ecto.Migration
  import Ecto.Query
  import Supervisor.Spec
  alias Pleroma.{Repo, User}

  def up do
    alter table(:users) do
      add :follower_address, :string, unique: true
    end
    flush()

    children = [
      # Start the endpoint when the application starts
      supervisor(Pleroma.Web.Endpoint, [])
    ]
    opts = [strategy: :one_for_one, name: Pleroma.Supervisor]
    Supervisor.start_link(children, opts)

    Enum.each(Repo.all(User), fn (user) ->
      if !user.follower_address do
        cs = Ecto.Changeset.change(user, %{follower_address: User.ap_followers(user)})
        Repo.update!(cs)
      end
    end)
  end

  def down do
    alter table(:users) do
      remove :follower_address
    end
  end
end