Add support for `account_id` param to filter notifications by the account
authorEgor Kislitsyn <egor@kislitsyn.com>
Tue, 17 Dec 2019 10:00:46 +0000 (17:00 +0700)
committerEgor Kislitsyn <egor@kislitsyn.com>
Tue, 17 Dec 2019 10:00:46 +0000 (17:00 +0700)
CHANGELOG.md
lib/pleroma/web/mastodon_api/mastodon_api.ex
test/web/mastodon_api/controllers/notification_controller_test.exs

index c133cd9ec4f3335f9132c025f5822bb457ffe7c7..f0274ca01ba663f22699eec0b6f6cdca8ff3340d 100644 (file)
@@ -86,6 +86,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Mastodon API: `/api/v1/update_credentials` accepts `actor_type` field.
 - Captcha: Support native provider
 - Captcha: Enable by default
+- Mastodon API: Add support for `account_id` param to filter notifications by the account
 </details>
 
 ### Fixed
index b1816370ef3c996eee077681d5aeec6afdafb114..6c13d4df6f2dd274c50281a57edb4ed49f743aff 100644 (file)
@@ -56,6 +56,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
     user
     |> Notification.for_user_query(options)
     |> restrict(:exclude_types, options)
+    |> restrict(:account_id, options)
     |> Pagination.fetch_paginated(params)
   end
 
@@ -71,7 +72,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
       exclude_visibilities: {:array, :string},
       reblogs: :boolean,
       with_muted: :boolean,
-      with_move: :boolean
+      with_move: :boolean,
+      account_id: :string
     }
 
     changeset = cast({%{}, param_types}, params, Map.keys(param_types))
@@ -88,5 +90,12 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
     |> where([q, a], not fragment("? @> ARRAY[?->>'type']::varchar[]", ^ap_types, a.data))
   end
 
+  defp restrict(query, :account_id, %{account_id: account_id}) do
+    case User.get_cached_by_id(account_id) do
+      %{ap_id: ap_id} -> where(query, [n, a], a.actor == ^ap_id)
+      _ -> where(query, [n, a], a.actor == "fake ap id")
+    end
+  end
+
   defp restrict(query, _, _), do: query
 end
index 6635ea7a2a027f562b60be06aa66ec1d6def10cf..3458776abbbd29af92dbeb0e13877a0c553227a0 100644 (file)
@@ -463,6 +463,29 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do
     assert length(json_response(conn, 200)) == 1
   end
 
+  describe "from specified user" do
+    test "account_id", %{conn: conn} do
+      user = insert(:user)
+      %{id: account_id} = other_user1 = insert(:user)
+      other_user2 = insert(:user)
+
+      {:ok, _activity} = CommonAPI.post(other_user1, %{"status" => "hi @#{user.nickname}"})
+      {:ok, _activity} = CommonAPI.post(other_user2, %{"status" => "bye @#{user.nickname}"})
+
+      assert [%{"account" => %{"id" => ^account_id}}] =
+               conn
+               |> assign(:user, user)
+               |> get("/api/v1/notifications", %{account_id: account_id})
+               |> json_response(200)
+
+      assert [] =
+               conn
+               |> assign(:user, user)
+               |> get("/api/v1/notifications", %{account_id: "cofe"})
+               |> json_response(200)
+    end
+  end
+
   defp get_notification_id_by_activity(%{id: id}) do
     Notification
     |> Repo.get_by(activity_id: id)