migration without using old field name
authorAlex S <alex.strizhakov@gmail.com>
Mon, 22 Apr 2019 05:45:45 +0000 (12:45 +0700)
committerAlex S <alex.strizhakov@gmail.com>
Thu, 25 Apr 2019 06:42:10 +0000 (13:42 +0700)
removing old field from db, after bookmarks migration

lib/pleroma/user.ex
priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs

index 3831588f97e8019f31a75b09b10f12e37284b8bd..c5b1ddc5da0991b15d4ba93a44a693c00b927b74 100644 (file)
@@ -55,8 +55,6 @@ 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)
index 09f02c22326d1a1d32f6a32bec25a528efc32f15..ebe69696e6ff68f797b2bffecd1504d600d05367 100644 (file)
@@ -6,24 +6,24 @@ defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do
   alias Pleroma.User
   alias Pleroma.Repo
 
-  def up do
+  def change do
     query =
       from(u in User,
         where: u.local == true,
-        where: fragment("array_length(?, 1)", u.old_bookmarks) > 0,
-        select: %{id: u.id, old_bookmarks: u.old_bookmarks}
+        where: fragment("array_length(bookmarks, 1)") > 0,
+        select: %{id: u.id, bookmarks: fragment("bookmarks")}
       )
 
     Repo.stream(query)
-    |> 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)
+    |> Enum.each(fn %{id: user_id, bookmarks: bookmarks} ->
+      Enum.each(bookmarks, fn ap_id ->
+        activity = Activity.get_create_by_object_ap_id(ap_id)
+        {:ok, _} = Bookmark.create(user_id, activity.id)
       end)
     end)
-  end
 
-  def down do
-    execute("TRUNCATE TABLE bookmarks")
+    alter table(:users) do
+      remove(:bookmarks)
+    end
   end
 end