Merge branch 'get-follow-requests-sql' into 'develop'
authorkaniini <nenolod@gmail.com>
Sun, 3 Mar 2019 15:51:32 +0000 (15:51 +0000)
committerkaniini <nenolod@gmail.com>
Sun, 3 Mar 2019 15:51:32 +0000 (15:51 +0000)
Use sql query in User.get_follow_requests/1 for filtering logic

See merge request pleroma/pleroma!883

1  2 
lib/pleroma/user.ex

index 82922d2365c85f7d1ba2e04a0cdc61d7a16eea75,06b430ccde048cb89462d328c91f0f8e35f1b650..d69ca094e7f5821fad457caa3b8db1c738e102af
@@@ -621,24 -621,16 +621,23 @@@ defmodule Pleroma.User d
      )
    end
  
 -  def update_follow_request_count(%User{} = user) do
 -    subquery =
 +  def get_follow_requests(%User{} = user) do
-     q = get_follow_requests_query(user)
-     reqs = Repo.all(q)
 +    users =
-       Enum.map(reqs, fn req -> req.actor end)
-       |> Enum.uniq()
-       |> Enum.map(fn ap_id -> get_by_ap_id(ap_id) end)
-       |> Enum.filter(fn u -> !is_nil(u) end)
-       |> Enum.filter(fn u -> !following?(u, user) end)
+       user
+       |> User.get_follow_requests_query()
 -      |> select([a], %{count: count(a.id)})
++      |> join(:inner, [a], u in User, a.actor == u.ap_id)
++      |> where([a, u], not fragment("? @> ?", u.following, ^[user.follower_address]))
++      |> group_by([a, u], u.id)
++      |> select([a, u], u)
++      |> Repo.all()
 +
 +    {:ok, users}
 +  end
  
 +  def increase_note_count(%User{} = user) do
      User
      |> where(id: ^user.id)
 -    |> join(:inner, [u], s in subquery(subquery))
 -    |> update([u, s],
 +    |> update([u],
        set: [
          info:
            fragment(