Merge branch 'optimisation/deactivated-subquery' into 'develop'
authorlain <lain@soykaf.club>
Mon, 6 Dec 2021 19:55:52 +0000 (19:55 +0000)
committerlain <lain@soykaf.club>
Mon, 6 Dec 2021 19:55:52 +0000 (19:55 +0000)
Make deactivated user check into a subquery

Closes #2792

See merge request pleroma/pleroma!3554

lib/pleroma/activity.ex
test/pleroma/web/activity_pub/activity_pub_test.exs

index b88f74f4717ff27f24b12da153f6f65def14ed23..4106feef6d5baac44bc62c422ad4d3df2d6e2980 100644 (file)
@@ -362,11 +362,9 @@ defmodule Pleroma.Activity do
   end
 
   def restrict_deactivated_users(query) do
-    deactivated_users =
-      from(u in User.Query.build(%{deactivated: true}), select: u.ap_id)
-      |> Repo.all()
+    deactivated_users_query = from(u in User.Query.build(%{deactivated: true}), select: u.ap_id)
 
-    Activity.Queries.exclude_authors(query, deactivated_users)
+    from(activity in query, where: activity.actor not in subquery(deactivated_users_query))
   end
 
   defdelegate search(user, query, options \\ []), to: Pleroma.Activity.Search
index a61244c7676657e3be92e4bd0bd91871240afb9a..574ef0d7155da69623db2c7488495e5735a87e4a 100644 (file)
@@ -776,6 +776,20 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
     assert Enum.member?(activities, activity_one)
   end
 
+  test "doesn't return activities from deactivated users" do
+    _user = insert(:user)
+    deactivated = insert(:user)
+    active = insert(:user)
+    {:ok, activity_one} = CommonAPI.post(deactivated, %{status: "hey!"})
+    {:ok, activity_two} = CommonAPI.post(active, %{status: "yay!"})
+    {:ok, _updated_user} = User.set_activation(deactivated, false)
+
+    activities = ActivityPub.fetch_activities([], %{})
+
+    refute Enum.member?(activities, activity_one)
+    assert Enum.member?(activities, activity_two)
+  end
+
   test "always see your own posts even when they address people you block" do
     user = insert(:user)
     blockee = insert(:user)