migrate user.bookmarks to separate table
authorAlex S <alex.strizhakov@gmail.com>
Sun, 14 Apr 2019 14:37:05 +0000 (21:37 +0700)
committerAlex S <alex.strizhakov@gmail.com>
Thu, 25 Apr 2019 06:38:24 +0000 (13:38 +0700)
lib/pleroma/user.ex
priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs [new file with mode: 0644]

index c5b1ddc5da0991b15d4ba93a44a693c00b927b74..3831588f97e8019f31a75b09b10f12e37284b8bd 100644 (file)
@@ -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 (file)
index 0000000..1930fc3
--- /dev/null
@@ -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