defmodule Pleroma.Repo.Migrations.AddFollowingAddressFromSourceData do
  alias Pleroma.User
  import Ecto.Query
  require Logger
  use Ecto.Migration

  def change do
    query =
      User.Query.build(%{
        external: true,
        legacy_active: true,
        order_by: :id
      })
      |> select([u], struct(u, [:id, :ap_id, :info]))

    Pleroma.Repo.stream(query)
    |> Enum.each(fn
      %{info: %{source_data: source_data}} = user ->
        Ecto.Changeset.cast(user, %{following_address: source_data["following"]}, [
          :following_address
        ])
        |> Pleroma.Repo.update()

      user ->
        Logger.warn("User #{user.id} / #{user.nickname} does not seem to have source_data")
    end)
  end
end
