forked from AkkomaGang/akkoma
Merge branch 'feature/pleromafe-usersearch' into 'develop'
Add Twitter / Pleroma API user search See merge request pleroma/pleroma!452
This commit is contained in:
commit
2f639ea129
5 changed files with 42 additions and 2 deletions
|
@ -498,7 +498,7 @@ def get_recipients_from_activity(%Activity{recipients: to}) do
|
||||||
Repo.all(query)
|
Repo.all(query)
|
||||||
end
|
end
|
||||||
|
|
||||||
def search(query, resolve) do
|
def search(query, resolve \\ false) do
|
||||||
# strip the beginning @ off if there is a query
|
# strip the beginning @ off if there is a query
|
||||||
query = String.trim_leading(query, "@")
|
query = String.trim_leading(query, "@")
|
||||||
|
|
||||||
|
|
|
@ -250,7 +250,12 @@ defmodule Pleroma.Web.Router do
|
||||||
get("/statuses/networkpublic_timeline", TwitterAPI.Controller, :public_and_external_timeline)
|
get("/statuses/networkpublic_timeline", TwitterAPI.Controller, :public_and_external_timeline)
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/api", Pleroma.Web do
|
scope "/api", Pleroma.Web, as: :twitter_api_search do
|
||||||
|
pipe_through(:api)
|
||||||
|
get("/pleroma/search_user", TwitterAPI.Controller, :search_user)
|
||||||
|
end
|
||||||
|
|
||||||
|
scope "/api", Pleroma.Web, as: :authenticated_twitter_api do
|
||||||
pipe_through(:authenticated_api)
|
pipe_through(:authenticated_api)
|
||||||
|
|
||||||
get("/account/verify_credentials", TwitterAPI.Controller, :verify_credentials)
|
get("/account/verify_credentials", TwitterAPI.Controller, :verify_credentials)
|
||||||
|
|
|
@ -529,6 +529,13 @@ def search(%{assigns: %{user: user}} = conn, %{"q" => _query} = params) do
|
||||||
|> render(ActivityView, "index.json", %{activities: activities, for: user})
|
|> render(ActivityView, "index.json", %{activities: activities, for: user})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def search_user(%{assigns: %{user: user}} = conn, %{"query" => query}) do
|
||||||
|
users = User.search(query, true)
|
||||||
|
|
||||||
|
conn
|
||||||
|
|> render(UserView, "index.json", %{users: users, for: user})
|
||||||
|
end
|
||||||
|
|
||||||
defp bad_request_reply(conn, error_message) do
|
defp bad_request_reply(conn, error_message) do
|
||||||
json = error_json(conn, error_message)
|
json = error_json(conn, error_message)
|
||||||
json_reply(conn, 400, json)
|
json_reply(conn, 400, json)
|
||||||
|
|
|
@ -578,4 +578,16 @@ test "User.delete() plugs any possible zombie objects" do
|
||||||
assert cached_user != user
|
assert cached_user != user
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "User.search" do
|
||||||
|
test "finds a user, ranking by similarity" do
|
||||||
|
user = insert(:user, %{name: "lain"})
|
||||||
|
user_two = insert(:user, %{name: "ean"})
|
||||||
|
user_three = insert(:user, %{name: "ebn", nickname: "lain@mastodon.social"})
|
||||||
|
user_four = insert(:user, %{nickname: "lain@pleroma.soykaf.com"})
|
||||||
|
|
||||||
|
assert user_four ==
|
||||||
|
User.search("lain@ple") |> List.first() |> Map.put(:search_distance, nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1211,4 +1211,20 @@ test "it denies a friend request" do
|
||||||
assert relationship["follows_you"] == false
|
assert relationship["follows_you"] == false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "GET /api/pleroma/search_user" do
|
||||||
|
test "it returns users, ordered by similarity", %{conn: conn} do
|
||||||
|
user = insert(:user, %{name: "eal"})
|
||||||
|
user_two = insert(:user, %{name: "ean"})
|
||||||
|
user_three = insert(:user, %{name: "ebn"})
|
||||||
|
|
||||||
|
resp =
|
||||||
|
conn
|
||||||
|
|> get(twitter_api_search__path(conn, :search_user), query: "eal")
|
||||||
|
|> json_response(200)
|
||||||
|
|
||||||
|
assert length(resp) == 3
|
||||||
|
assert [user.id, user_two.id, user_three.id] == Enum.map(resp, fn %{"id" => id} -> id end)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue