Current section

Files

Jump to
server_utils lib plugs page_request.ex
Raw

lib/plugs/page_request.ex

defmodule ServerUtils.Plugs.PageRequest do
@moduledoc """
Plug to build a paginated request.
If there is no pagination params or they not fullfil the configureation a default page value will be used.
"""
import Plug.Conn
alias ServerUtils.Parsers.ParamsParser
alias ServerUtils.Page.PageParams
@spec init(Keyword.t) :: Keyword.t
def init(default), do: default
@spec call(Plug.Conn.t, Keyword.t) :: Plug.Conn.t
def call(%Plug.Conn{query_string: query_string} = conn, _default) do
query_string
|> URI.decode_query()
|> ParamsParser.parse_page_params()
|> set_page_request(conn)
end
def call(conn, _default), do: conn
@spec set_page_request(PageParams.t, Plug.Conn.t) :: Plug.Conn.t
defp set_page_request(user_id, conn) do
put_private(conn, :page_request, user_id)
end
end