Refactor a little bit
[akkoma] / lib / pleroma / user.ex
index 52df171c55ea2933f79e0fd2160983de8072a12d..3c6fb4f9b614f46ed9f9a225527bc64ad9322e89 100644 (file)
@@ -755,27 +755,29 @@ defmodule Pleroma.User do
     Repo.all(query)
   end
 
-  def search(query, resolve \\ false, for_user \\ nil, limit \\ 20) do
+  def search(term, options \\ %{}) do
     # Strip the beginning @ off if there is a query
-    query = String.trim_leading(query, "@")
+    term = String.trim_leading(term, "@")
+    query = options[:query] || User
 
-    if resolve, do: get_or_fetch(query)
+    if options[:resolve], do: get_or_fetch(term)
 
-    fts_results = do_search(fts_search_subquery(query), for_user, %{limit: limit})
+    fts_results =
+      do_search(fts_search_subquery(term, query), options[:for_user], limit: options[:limit])
 
     {:ok, trigram_results} =
       Repo.transaction(fn ->
         Ecto.Adapters.SQL.query(Repo, "select set_limit(0.25)", [])
-        do_search(trigram_search_subquery(query), for_user, %{limit: limit})
+
+        do_search(trigram_search_subquery(term, query), options[:for_user], limit: options[:limit])
       end)
 
     Enum.uniq_by(fts_results ++ trigram_results, & &1.id)
   end
 
-  def all_except_one(user, page, page_size) do
+  def all(page, page_size) do
     from(
       u in User,
-      where: u.id != ^user.id,
       limit: ^page_size,
       offset: ^((page - 1) * page_size),
       order_by: u.id
@@ -809,9 +811,9 @@ defmodule Pleroma.User do
     boost_search_results(results, for_user)
   end
 
-  defp fts_search_subquery(query) do
+  defp fts_search_subquery(term, query) do
     processed_query =
-      query
+      term
       |> String.replace(~r/\W+/, " ")
       |> String.trim()
       |> String.split()
@@ -819,7 +821,7 @@ defmodule Pleroma.User do
       |> Enum.join(" | ")
 
     from(
-      u in User,
+      u in query,
       select_merge: %{
         search_rank:
           fragment(
@@ -849,19 +851,19 @@ defmodule Pleroma.User do
     )
   end
 
-  defp trigram_search_subquery(query) do
+  defp trigram_search_subquery(term, query) do
     from(
-      u in User,
+      u in query,
       select_merge: %{
         search_rank:
           fragment(
             "similarity(?, trim(? || ' ' || coalesce(?, '')))",
-            ^query,
+            ^term,
             u.nickname,
             u.name
           )
       },
-      where: fragment("trim(? || ' ' || coalesce(?, '')) % ?", u.nickname, u.name, ^query)
+      where: fragment("trim(? || ' ' || coalesce(?, '')) % ?", u.nickname, u.name, ^term)
     )
   end
 
@@ -1018,6 +1020,10 @@ defmodule Pleroma.User do
     update_and_set_cache(cng)
   end
 
+  def maybe_local_user_query(local) do
+    if local, do: local_user_query(), else: User
+  end
+
   def local_user_query do
     from(
       u in User,