v2 Suggestions: actually flter out dismissed suggestions

This commit is contained in:
Alex Gleason 2021-11-26 21:02:14 -06:00
parent aee55b9a8b
commit 437c1a5a52
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
3 changed files with 45 additions and 3 deletions

View File

@ -46,6 +46,7 @@ defmodule Pleroma.User.Query do
unconfirmed: boolean(), unconfirmed: boolean(),
is_admin: boolean(), is_admin: boolean(),
is_moderator: boolean(), is_moderator: boolean(),
is_suggested: boolean(),
super_users: boolean(), super_users: boolean(),
invisible: boolean(), invisible: boolean(),
internal: boolean(), internal: boolean(),

View File

@ -4,6 +4,7 @@
defmodule Pleroma.Web.MastodonAPI.SuggestionController do defmodule Pleroma.Web.MastodonAPI.SuggestionController do
use Pleroma.Web, :controller use Pleroma.Web, :controller
import Ecto.Query
alias Pleroma.User alias Pleroma.User
alias Pleroma.UserRelationship alias Pleroma.UserRelationship
@ -65,15 +66,28 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionController do
do: Pleroma.Web.MastodonAPI.MastodonAPIController.empty_array(conn, params) do: Pleroma.Web.MastodonAPI.MastodonAPIController.empty_array(conn, params)
@doc "GET /api/v2/suggestions" @doc "GET /api/v2/suggestions"
def index2(%{assigns: %{user: user}} = conn, params) do def index2(%{assigns: %{user: %{id: user_id} = user}} = conn, params) do
limit = Map.get(params, :limit, 40) |> min(80) limit = Map.get(params, :limit, 40) |> min(80)
users = users =
%{is_suggested: true, limit: limit} %{is_suggested: true, invisible: false, limit: limit}
|> User.Query.build() |> User.Query.build()
|> where([u], u.id != ^user_id)
|> join(:left, [u], r in UserRelationship,
as: :relationships,
on:
r.target_id == u.id and r.source_id == ^user_id and
r.relationship_type in [:block, :mute, :suggestion_dismiss]
)
|> where([relationships: r], is_nil(r.target_id))
|> Pleroma.Repo.all() |> Pleroma.Repo.all()
render(conn, "index.json", %{users: users, source: :staff, for: user}) render(conn, "index.json", %{
users: users,
source: :staff,
for: user,
skip_visibility_check: true
})
end end
@doc "DELETE /api/v1/suggestions/:account_id" @doc "DELETE /api/v1/suggestions/:account_id"

View File

@ -29,6 +29,33 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do
assert [%{"source" => "staff", "account" => %{"id" => ^user_id}}] = res assert [%{"source" => "staff", "account" => %{"id" => ^user_id}}] = res
end end
test "returns v2 suggestions excluding dismissed accounts", %{conn: conn} do
%{id: user_id} = insert(:user, is_suggested: true)
conn
|> delete("/api/v1/suggestions/#{user_id}")
|> json_response_and_validate_schema(200)
res =
conn
|> get("/api/v2/suggestions")
|> json_response_and_validate_schema(200)
assert [] = res
end
test "returns v2 suggestions excluding blocked accounts", %{conn: conn, user: blocker} do
blocked = insert(:user, is_suggested: true)
{:ok, _} = Pleroma.Web.CommonAPI.block(blocker, blocked)
res =
conn
|> get("/api/v2/suggestions")
|> json_response_and_validate_schema(200)
assert [] = res
end
test "dismiss suggestion", %{conn: conn, user: source} do test "dismiss suggestion", %{conn: conn, user: source} do
target = insert(:user, is_suggested: true) target = insert(:user, is_suggested: true)