optimise notifications query
[akkoma] / lib / pleroma / web / mastodon_api / mastodon_api.ex
index 71479550eb61402617bc97d3dd560502135dd4a7..69bc2f0d6e49227b461a3f7f39ad92beee9eba97 100644 (file)
@@ -24,6 +24,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
     with {:ok, follower, _followed, _} <- result do
       options = cast_params(params)
       set_reblogs_visibility(options[:reblogs], result)
+      set_subscription(options[:notify], result)
       {:ok, follower}
     end
   end
@@ -36,6 +37,16 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
     CommonAPI.show_reblogs(follower, followed)
   end
 
+  defp set_subscription(true, {:ok, follower, followed, _}) do
+    User.subscribe(follower, followed)
+  end
+
+  defp set_subscription(false, {:ok, follower, followed, _}) do
+    User.unsubscribe(follower, followed)
+  end
+
+  defp set_subscription(_, _), do: {:ok, nil}
+
   @spec get_followers(User.t(), map()) :: list(User.t())
   def get_followers(user, params \\ %{}) do
     user
@@ -52,11 +63,16 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
   def get_notifications(user, params \\ %{}) do
     options = cast_params(params)
 
-    user
-    |> Notification.for_user_query(options)
-    |> restrict(:include_types, options)
-    |> restrict(:exclude_types, options)
-    |> restrict(:account_ap_id, options)
+    query =
+      user
+      |> Notification.for_user_query(options)
+      |> restrict(:include_types, options)
+      |> restrict(:exclude_types, options)
+      |> restrict(:account_ap_id, options)
+
+    IO.inspect(Pleroma.Repo.to_sql(:all, query))
+
+    query
     |> Pagination.fetch_paginated(params)
   end
 
@@ -73,7 +89,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
       exclude_visibilities: {:array, :string},
       reblogs: :boolean,
       with_muted: :boolean,
-      account_ap_id: :string
+      account_ap_id: :string,
+      notify: :boolean
     }
 
     changeset = cast({%{}, param_types}, params, Map.keys(param_types))