diff options
author | kaniini <ariadne@dereferenced.org> | 2019-08-14 02:17:18 +0000 |
---|---|---|
committer | kaniini <ariadne@dereferenced.org> | 2019-08-14 02:17:18 +0000 |
commit | d6da4a75ce2f07ed07f2acc27f06cc367eea760f (patch) | |
tree | c8534279ad7a442df42f4d1539f2bfb909cde520 /lib/mix/tasks/pleroma/database.ex | |
parent | 9c499435f046d58b4a56605c190a890b070f5315 (diff) | |
parent | dcb4711e92382b88326260d7e1951eb66941ed1b (diff) | |
download | pleroma-1.0.5.tar.gz |
Merge branch 'release/1.0.5' into 'master'v1.0.5
1.0.5 release
See merge request pleroma/pleroma!1549
Diffstat (limited to 'lib/mix/tasks/pleroma/database.ex')
-rw-r--r-- | lib/mix/tasks/pleroma/database.ex | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index e91fb31d1..990651da4 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -35,6 +35,10 @@ defmodule Mix.Tasks.Pleroma.Database do ## Remove duplicated items from following and update followers count for all users mix pleroma.database update_users_following_followers_counts + + ## Fix the pre-existing "likes" collections for all objects + + mix pleroma.database fix_likes_collections """ def run(["remove_embedded_objects" | args]) do {options, [], []} = @@ -119,4 +123,36 @@ defmodule Mix.Tasks.Pleroma.Database do ) end end + + def run(["fix_likes_collections"]) do + import Ecto.Query + + start_pleroma() + + from(object in Object, + where: fragment("(?)->>'likes' is not null", object.data), + select: %{id: object.id, likes: fragment("(?)->>'likes'", object.data)} + ) + |> Pleroma.RepoStreamer.chunk_stream(100) + |> Stream.each(fn objects -> + ids = + objects + |> Enum.filter(fn object -> object.likes |> Jason.decode!() |> is_map() end) + |> Enum.map(& &1.id) + + Object + |> where([object], object.id in ^ids) + |> update([object], + set: [ + data: + fragment( + "jsonb_set(?, '{likes}', '[]'::jsonb, true)", + object.data + ) + ] + ) + |> Repo.update_all([], timeout: :infinity) + end) + |> Stream.run() + end end |