diff options
| -rw-r--r-- | lib/pleroma/user.ex | 10 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 17 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 2 | ||||
| -rw-r--r-- | test/web/mastodon_api/mastodon_api_controller_test.exs | 13 | 
4 files changed, 27 insertions, 15 deletions
| diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index bfd3a3ad7..bf63a22b3 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -274,4 +274,14 @@ defmodule Pleroma.User do      Repo.all(query)    end + +  def search(query, resolve) do +    if resolve do +      User.get_or_fetch_by_nickname(query) +    end +    q = from u in User, +      where: fragment("(to_tsvector('english', ?) || to_tsvector('english', ?)) @@ plainto_tsquery('english', ?)", u.nickname, u.name, ^query), +      limit: 20 +    Repo.all(q) +  end  end diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index dacb0ebe3..9399dee86 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -308,19 +308,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      end    end -  def dousersearch(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do -    if params["resolve"] == "true" do -      User.get_or_fetch_by_nickname(query) -    end - -    q = from u in User, -      where: fragment("(to_tsvector('english', ?) || to_tsvector('english', ?)) @@ plainto_tsquery('english', ?)", u.nickname, u.name, ^query), -      limit: 20 -    accounts = Repo.all(q) -  end -    def search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do -    accounts = Pleroma.Web.MastodonAPI.MastodonAPIController.dousersearch(conn, params) +    accounts = User.search(query, params["resolve"] == "true")      q = from a in Activity,        where: fragment("?->>'type' = 'Create'", a.data), @@ -337,8 +326,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      json(conn, res)    end -  def accountsearch(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do -    accounts = Pleroma.Web.MastodonAPI.MastodonAPIController.dousersearch(conn, params) +  def account_search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do +    accounts = User.search(query, params["resolve"] == "true")      res = AccountView.render("accounts.json", users: accounts, for: user, as: :user) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 53f4a45e3..1fb5eadf6 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -55,7 +55,7 @@ defmodule Pleroma.Web.Router do      get "/accounts/verify_credentials", MastodonAPIController, :verify_credentials      get "/accounts/relationships", MastodonAPIController, :relationships -    get "/accounts/search", MastodonAPIController, :accountsearch +    get "/accounts/search", MastodonAPIController, :account_search      post "/accounts/:id/follow", MastodonAPIController, :follow      post "/accounts/:id/unfollow", MastodonAPIController, :unfollow      post "/accounts/:id/block", MastodonAPIController, :relationship_noop diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index acdb08ac2..485a0d029 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -319,6 +319,19 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do      end)    end +  test "account seach", %{conn: conn} do +    user = insert(:user) +    user_two = insert(:user, %{nickname: "shp@shitposter.club"}) +    user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"}) + +    conn = conn +    |> assign(:user, user) +    |> get("/api/v1/accounts/search", %{"q" => "2hu"}) + +    assert [account] = json_response(conn, 200) +    assert account["id"] == user_three.id +  end +    test "search", %{conn: conn} do      user = insert(:user)      user_two = insert(:user, %{nickname: "shp@shitposter.club"}) | 
