diff options
author | kaniini <ariadne@dereferenced.org> | 2019-08-10 18:47:40 +0000 |
---|---|---|
committer | kaniini <ariadne@dereferenced.org> | 2019-08-10 18:47:40 +0000 |
commit | 708e7f09423eb28c97a8007b9b11bb7b94c9e296 (patch) | |
tree | f7257a5ec1e5c6f3f22cf337ef005089aae3d2e9 /lib/mix | |
parent | 5aa62b8581b1fb13a1d799906d6a7fe8e68c35ba (diff) | |
parent | af4cf35e2096a6d1660271f6935b6b9ce77c6757 (diff) | |
download | pleroma-708e7f09423eb28c97a8007b9b11bb7b94c9e296.tar.gz |
Merge branch 'fix/crash-favourited-by-ordered-collections' into 'develop'
Strip internal fields including likes from incoming and outgoing activities
Closes #1159
See merge request pleroma/pleroma!1533
Diffstat (limited to 'lib/mix')
-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 8547a329a..bcc2052d6 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -36,6 +36,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, [], []} = @@ -125,4 +129,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 |