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 01d532ab3158b3060e26a3fb0d3d69f6c37c5bcc..3c6fb4f9b614f46ed9f9a225527bc64ad9322e89 100644
(file)
--- a/
lib/pleroma/user.ex
+++ b/
lib/pleroma/user.ex
@@
-755,30
+755,47
@@
defmodule Pleroma.User do
Repo.all(query)
end
Repo.all(query)
end
- def search(
query, resolve \\ false, for_user \\ nil
) 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)
+ 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)
+
+ 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) do
- query = from(u in User, where: u.id != ^user.id)
+ def all(page, page_size) do
+ from(
+ u in User,
+ limit: ^page_size,
+ offset: ^((page - 1) * page_size),
+ order_by: u.id
+ )
+ |> Repo.all()
+ end
- Repo.all(query)
+ def count_all_except_one(user) do
+ query =
+ from(
+ u in User,
+ where: u.id != ^user.id
+ )
+
+ Repo.aggregate(query, :count, :id)
end
end
- defp do_search(subquery, for_user, options
\\ []
) do
+ defp do_search(subquery, for_user, options) do
q =
from(
s in subquery(subquery),
q =
from(
s in subquery(subquery),
@@
-794,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()
@@
-804,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(
@@
-834,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
@@
-1003,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,