defmodule EventStore.Page do
@moduledoc """
A page of results from a paginated query.
"""
alias EventStore.Page
defstruct [:page_number, :page_size, :total_entries, :total_pages, entries: []]
@type t :: %Page{
entries: list(),
page_number: pos_integer(),
page_size: integer(),
total_entries: integer(),
total_pages: pos_integer()
}
@type t(entry) :: %Page{
entries: list(entry),
page_number: pos_integer(),
page_size: integer(),
total_entries: integer(),
total_pages: pos_integer()
}
def total_pages(0, _page_size), do: 1
def total_pages(total_entries, page_size) do
(total_entries / page_size) |> Float.ceil() |> round()
end
end