defmodule PhilomenaWeb.PaginationPlug do import Plug.Conn alias Pow.Plug # No options def init([]), do: [] # Assign pagination info def call(conn, _opts) do conn = conn |> fetch_query_params() user = conn |> Plug.current_user() params = conn.params page_number = case Integer.parse(params["page"] |> to_string()) do {int, _rest} -> int _ -> 1 end page_number = page_number |> max(1) page_size = case Integer.parse(params["per_page"] |> to_string()) do {int, _rest} -> int _ -> 25 end page_size = page_size |> max(1) |> min(50) conn |> assign(:pagination, %{page_number: page_number, page_size: page_size}) |> assign(:image_pagination, %{page_number: page_number, page_size: image_page_size(user)}) |> assign(:scrivener, [page: page_number, page_size: page_size]) |> assign(:comment_scrivener, [page: page_number, page_size: comment_page_size(user)]) end defp image_page_size(%{images_per_page: x}), do: x defp image_page_size(_user), do: 15 defp comment_page_size(%{comments_per_page: x}), do: x defp comment_page_size(_user), do: 25 end