forked from AkkomaGang/akkoma
[#2053] Changed Notification/for_user_query/2
to use join to filter out inactive actors instead of subselect of _all_ inactive AP ids from users
.
This commit is contained in:
parent
db716f860a
commit
284504f689
1 changed files with 5 additions and 9 deletions
|
@ -112,13 +112,6 @@ def for_user_query(user, opts \\ %{}) do
|
||||||
|
|
||||||
Notification
|
Notification
|
||||||
|> where(user_id: ^user.id)
|
|> 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(:inner, [n], activity in assoc(n, :activity))
|
||||||
|> join(:left, [n, a], object in Object,
|
|> join(:left, [n, a], object in Object,
|
||||||
on:
|
on:
|
||||||
|
@ -129,7 +122,9 @@ def for_user_query(user, opts \\ %{}) do
|
||||||
a.data
|
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})
|
|> 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_notification_muted(user, exclude_notification_muted_opts)
|
||||||
|> exclude_blocked(user, exclude_blocked_opts)
|
|> exclude_blocked(user, exclude_blocked_opts)
|
||||||
|> exclude_filtered(user)
|
|> exclude_filtered(user)
|
||||||
|
@ -156,9 +151,10 @@ defp exclude_notification_muted(query, user, opts) do
|
||||||
query
|
query
|
||||||
|> where([n, a], a.actor not in ^notification_muted_ap_ids)
|
|> where([n, a], a.actor not in ^notification_muted_ap_ids)
|
||||||
|> join(:left, [n, a], tm in ThreadMute,
|
|> 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
|
end
|
||||||
|
|
||||||
defp exclude_filtered(query, user) do
|
defp exclude_filtered(query, user) do
|
||||||
|
|
Loading…
Reference in a new issue