projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Refactor a little bit
[akkoma]
/
lib
/
pleroma
/
user.ex
diff --git
a/lib/pleroma/user.ex
b/lib/pleroma/user.ex
index 52df171c55ea2933f79e0fd2160983de8072a12d..3c6fb4f9b614f46ed9f9a225527bc64ad9322e89 100644
(file)
--- a/
lib/pleroma/user.ex
+++ b/
lib/pleroma/user.ex
@@
-755,27
+755,29
@@
defmodule Pleroma.User do
Repo.all(query)
end
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
# 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)", [])
{: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
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,
from(
u in User,
- where: u.id != ^user.id,
limit: ^page_size,
offset: ^((page - 1) * page_size),
order_by: u.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
boost_search_results(results, for_user)
end
- defp fts_search_subquery(query) do
+ defp fts_search_subquery(
term,
query) do
processed_query =
processed_query =
- query
+ term
|> String.replace(~r/\W+/, " ")
|> String.trim()
|> String.split()
|> String.replace(~r/\W+/, " ")
|> String.trim()
|> String.split()
@@
-819,7
+821,7
@@
defmodule Pleroma.User do
|> Enum.join(" | ")
from(
|> Enum.join(" | ")
from(
- u in
User
,
+ u in
query
,
select_merge: %{
search_rank:
fragment(
select_merge: %{
search_rank:
fragment(
@@
-849,19
+851,19
@@
defmodule Pleroma.User do
)
end
)
end
- defp trigram_search_subquery(query) do
+ defp trigram_search_subquery(
term,
query) do
from(
from(
- u in
User
,
+ u in
query
,
select_merge: %{
search_rank:
fragment(
"similarity(?, trim(? || ' ' || coalesce(?, '')))",
select_merge: %{
search_rank:
fragment(
"similarity(?, trim(? || ' ' || coalesce(?, '')))",
- ^
query
,
+ ^
term
,
u.nickname,
u.name
)
},
u.nickname,
u.name
)
},
- where: fragment("trim(? || ' ' || coalesce(?, '')) % ?", u.nickname, u.name, ^
query
)
+ where: fragment("trim(? || ' ' || coalesce(?, '')) % ?", u.nickname, u.name, ^
term
)
)
end
)
end
@@
-1018,6
+1020,10
@@
defmodule Pleroma.User do
update_and_set_cache(cng)
end
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,
def local_user_query do
from(
u in User,