forked from AkkomaGang/akkoma
v2 Suggestions: actually flter out dismissed suggestions
This commit is contained in:
parent
aee55b9a8b
commit
437c1a5a52
3 changed files with 45 additions and 3 deletions
|
@ -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(),
|
||||||
|
|
|
@ -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 @@ def index(conn, params),
|
||||||
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"
|
||||||
|
|
|
@ -29,6 +29,33 @@ test "returns v2 suggestions", %{conn: conn} 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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue