Merge branch '2053-notifications-actor-is-active-refactoring' into 'develop'
authorrinpatch <rin@patch.cx>
Tue, 16 Feb 2021 10:11:41 +0000 (10:11 +0000)
committerrinpatch <rin@patch.cx>
Tue, 16 Feb 2021 10:11:41 +0000 (10:11 +0000)
[#2053] `Notification.for_user_query/2` timeout fix

Closes #2053

See merge request pleroma/pleroma!3318

lib/pleroma/notification.ex

index 1970fbf65d1611ac907fdeaa78aa6f660404e5d2..7efbdc49afe1811a145a78cc548ad0dd54935849 100644 (file)
@@ -112,13 +112,6 @@ defmodule Pleroma.Notification do
 
     Notification
     |> where(user_id: ^user.id)
-    |> where(
-      [n, a],
-      fragment(
-        "? not in (SELECT ap_id FROM users WHERE is_active = 'false')",
-        a.actor
-      )
-    )
     |> join(:inner, [n], activity in assoc(n, :activity))
     |> join(:left, [n, a], object in Object,
       on:
@@ -129,7 +122,9 @@ defmodule Pleroma.Notification do
           a.data
         )
     )
+    |> join(:inner, [_n, a], u in User, on: u.ap_id == a.actor, as: :user_actor)
     |> preload([n, a, o], activity: {a, object: o})
+    |> where([user_actor: user_actor], user_actor.is_active)
     |> exclude_notification_muted(user, exclude_notification_muted_opts)
     |> exclude_blocked(user, exclude_blocked_opts)
     |> exclude_filtered(user)
@@ -156,9 +151,10 @@ defmodule Pleroma.Notification do
     query
     |> where([n, a], a.actor not in ^notification_muted_ap_ids)
     |> join(:left, [n, a], tm in ThreadMute,
-      on: tm.user_id == ^user.id and tm.context == fragment("?->>'context'", a.data)
+      on: tm.user_id == ^user.id and tm.context == fragment("?->>'context'", a.data),
+      as: :thread_mute
     )
-    |> where([n, a, o, tm], is_nil(tm.user_id))
+    |> where([thread_mute: thread_mute], is_nil(thread_mute.user_id))
   end
 
   defp exclude_filtered(query, user) do