Extract report actions from `MastodonAPIController` to `ReportController`
[akkoma] / lib / pleroma / moderation_log.ex
index c72a413b616bfd9ee51766f35a5ea94bbaa06a5f..352cad4335a40f9c1beea6ac5c2b258191527b72 100644 (file)
@@ -15,12 +15,18 @@ defmodule Pleroma.ModerationLog do
   end
 
   def get_all(params) do
-    params
-    |> get_all_query()
-    |> maybe_filter_by_date(params)
-    |> maybe_filter_by_user(params)
-    |> maybe_filter_by_search(params)
-    |> Repo.all()
+    base_query =
+      get_all_query()
+      |> maybe_filter_by_date(params)
+      |> maybe_filter_by_user(params)
+      |> maybe_filter_by_search(params)
+
+    query_with_pagination = base_query |> paginate_query(params)
+
+    %{
+      items: Repo.all(query_with_pagination),
+      count: Repo.aggregate(base_query, :count, :id)
+    }
   end
 
   defp maybe_filter_by_date(query, %{start_date: nil, end_date: nil}), do: query
@@ -61,14 +67,19 @@ defmodule Pleroma.ModerationLog do
     )
   end
 
-  defp get_all_query(%{page: page, page_size: page_size}) do
-    from(q in __MODULE__,
-      order_by: [desc: q.inserted_at],
+  defp paginate_query(query, %{page: page, page_size: page_size}) do
+    from(q in query,
       limit: ^page_size,
       offset: ^((page - 1) * page_size)
     )
   end
 
+  defp get_all_query do
+    from(q in __MODULE__,
+      order_by: [desc: q.inserted_at]
+    )
+  end
+
   defp parse_datetime(datetime) do
     {:ok, parsed_datetime, _} = DateTime.from_iso8601(datetime)
 
@@ -248,8 +259,12 @@ defmodule Pleroma.ModerationLog do
     |> insert_log_entry_with_message()
   end
 
-  @spec insert_log(%{actor: User, action: String.t(), nicknames: [String.t()], tags: [String.t()]}) ::
-          {:ok, ModerationLog} | {:error, any}
+  @spec insert_log(%{
+          actor: User,
+          action: String.t(),
+          nicknames: [String.t()],
+          tags: [String.t()]
+        }) :: {:ok, ModerationLog} | {:error, any}
   def insert_log(%{
         actor: %User{} = actor,
         nicknames: nicknames,