From: Alex S <alex.strizhakov@gmail.com>
Date: Sun, 14 Apr 2019 14:37:05 +0000 (+0700)
Subject: migrate user.bookmarks to separate table
X-Git-Url: https://git.squeep.com/?a=commitdiff_plain;h=324c9c8ab54b7df59534f6a8160d4a20d5b79722;p=akkoma

migrate user.bookmarks to separate table
---

diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index c5b1ddc5d..3831588f9 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -55,6 +55,8 @@ defmodule Pleroma.User do
     field(:search_type, :integer, virtual: true)
     field(:tags, {:array, :string}, default: [])
     field(:last_refreshed_at, :naive_datetime_usec)
+    # TODO: add migration to delete `bookmarks` field from DB
+    field(:old_bookmarks, {:array, :string}, default: [], source: :bookmarks)
     has_many(:bookmarks, Bookmark)
     has_many(:notifications, Notification)
     has_many(:registrations, Registration)
diff --git a/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs b/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs
new file mode 100644
index 000000000..1930fc3cf
--- /dev/null
+++ b/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs
@@ -0,0 +1,21 @@
+defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do
+  use Ecto.Migration
+  alias Pleroma.Activity
+  alias Pleroma.Bookmark
+  alias Pleroma.User
+  alias Pleroma.Repo
+
+  def up do
+    Repo.all(User)
+    |> Enum.each(fn user ->
+      Enum.each(user.old_bookmarks, fn id ->
+        activity = Activity.get_create_by_object_ap_id(id)
+        {:ok, _} = Bookmark.create(user.id, activity.id)
+      end)
+    end)
+  end
+
+  def down do
+    execute("TRUNCATE TABLE bookmarks")
+  end
+end