Add pagination to logs
[akkoma] / lib / pleroma / moderation_log.ex
index 89a5e13c373a54e1b77cf86e2178d720ce393a5b..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)