aboutsummaryrefslogtreecommitdiff
path: root/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs
diff options
context:
space:
mode:
authordcc <dcc@logografos.com>2023-09-02 00:52:52 -0700
committerdcc <dcc@logografos.com>2023-09-02 00:52:52 -0700
commit3a4773c3c2bd0bbef244eb519b07208da9108e49 (patch)
tree973567a6f3abb37bfb0f785b1cad14ed55840ef5 /priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs
downloadanni-3a4773c3c2bd0bbef244eb519b07208da9108e49.tar.gz
anni-3a4773c3c2bd0bbef244eb519b07208da9108e49.tar.bz2
anni-3a4773c3c2bd0bbef244eb519b07208da9108e49.zip
First
Diffstat (limited to 'priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs')
-rw-r--r--priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs42
1 files changed, 42 insertions, 0 deletions
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 0000000..4fb7591
--- /dev/null
+++ b/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs
@@ -0,0 +1,42 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do
+ use Ecto.Migration
+ import Ecto.Query
+ alias Pleroma.Activity
+ alias Pleroma.Bookmark
+ 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 =
+ ap_id
+ |> Activity.create_by_object_ap_id()
+ |> Repo.one()
+
+ 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