summaryrefslogtreecommitdiff
path: root/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs
blob: c547d26424d4853a648692e8aa98a01dbe1ea3e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do
  use Ecto.Migration
  import Ecto.Query
  alias Pleroma.Activity
  alias Pleroma.Bookmark
  alias Pleroma.User
  alias Pleroma.Repo

  def up do
    query =
      from(u in "users",
        where: u.local == true,
        where: fragment("array_length(?, 1)", u.bookmarks) > 0,
        select: %{id: u.id, bookmarks: u.bookmarks}
      )

    Repo.stream(query)
    |> Enum.each(fn %{id: user_id, bookmarks: bookmarks} ->
      Enum.each(bookmarks, fn ap_id ->
        activity = Activity.get_create_by_object_ap_id(ap_id)
	      unless is_nil(activity), do: {:ok, _} = Bookmark.create(user_id, activity.id)
      end)
    end)

    alter table(:users) do
      remove(:bookmarks)
    end
  end

  def down do
    alter table(:users) do
      add :bookmarks, {:array, :string}, null: false, default: []
    end
  end
end