# `DDD.Page`
[🔗](https://github.com/blackuprise/vicander/blob/v0.1.1/lib/ddd/use_cases/page.ex#L1)

One numbered page of a listing, with the totals. Returned by `page/1` on repository adapters
and projections:

    {:ok, %DDD.Page{entries: lists, page: 2, page_size: 20, total_entries: 57, total_pages: 3}} =
      TodoListRepository.page(filter: [owner_id: id], order: [desc: :created_at], page: 2)

Counting makes this one extra query. For long or hot listings prefer `DDD.Slice`, which has no
totals and doesn't slow down on deep pages.

# `t`

```elixir
@type t() :: %DDD.Page{
  entries: [term()],
  page: pos_integer(),
  page_size: pos_integer(),
  total_entries: non_neg_integer(),
  total_pages: non_neg_integer()
}
```

# `has_next?`

```elixir
@spec has_next?(t()) :: boolean()
```

True when a later page exists.

# `has_previous?`

```elixir
@spec has_previous?(t()) :: boolean()
```

True when an earlier page exists.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
