logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: 9f0a2a714b498edfbacc638fa79e06e3a8dc4d04
parent: d659fcc1957600e7937af7e9a456af8bc452bbd8
Author: Roger Braun <roger@rogerbraun.net>
Date:   Sat, 16 Sep 2017 10:42:24 +0200

Add basic search.

Diffstat:

Mlib/pleroma/web/mastodon_api/mastodon_api_controller.ex21+++++++++++++++++++++
Mlib/pleroma/web/router.ex2++
Mtest/web/mastodon_api/mastodon_api_controller_test.exs22++++++++++++++++++++++
3 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -287,6 +287,27 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end end + def search(%{assigns: %{user: user}} = conn, %{"q" => query}) do + q = from u in User, + where: fragment("(to_tsvector(?) || to_tsvector(?)) @@ plainto_tsquery(?)", u.nickname, u.name, ^query), + limit: 20 + accounts = Repo.all(q) + + q = from a in Activity, + where: fragment("?->>'type' = 'Create'", a.data), + where: fragment("to_tsvector(?->'object'->>'content') @@ plainto_tsquery(?)", a.data, ^query), + limit: 20 + statuses = Repo.all(q) + + res = %{ + "accounts" => AccountView.render("accounts.json", users: accounts, for: user, as: :user), + "statuses" => StatusView.render("index.json", activities: statuses, for: user, as: :activity), + "hashtags" => [] + } + + json(conn, res) + end + def relationship_noop(%{assigns: %{user: user}} = conn, %{"id" => id}) do Logger.debug("Unimplemented, returning unmodified relationship") with %User{} = target <- Repo.get(User, id) do diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex @@ -87,6 +87,8 @@ defmodule Pleroma.Web.Router do get "/accounts/:id/followers", MastodonAPIController, :followers get "/accounts/:id/following", MastodonAPIController, :following get "/accounts/:id", MastodonAPIController, :user + + get "/search", MastodonAPIController, :search end scope "/api", Pleroma.Web do diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -310,4 +310,26 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do assert [] = json_response(conn, 200) end) end + + test "search", %{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"}) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "This is about 2hu"}) + {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"}) + + conn = conn + |> get("/api/v1/search", %{"q" => "2hu"}) + + assert results = json_response(conn, 200) + + [account] = results["accounts"] + assert account["id"] == user_three.id + + assert results["hashtags"] == [] + + [status] = results["statuses"] + assert status["id"] == activity.id + end end