Overview
The API implements cursor-based pagination for endpoints that return large lists of data. This ensures efficient data retrieval and better performance.Query Parameters
Paginated endpoints accept the following query parameters:| Parameter | Type | Default | Maximum | Description |
|---|---|---|---|---|
page | integer | 1 | - | The page number to retrieve |
limit | integer | 20 | 100 | Number of items per page |
Example Request
Pagination Response Structure
Paginated endpoints return a standardized response format:Pagination Metadata
Thepagination object provides complete information about the current page:
| Field | Type | Description |
|---|---|---|
page | integer | Current page number |
limit | integer | Items per page |
totalCount | integer | Total number of items across all pages |
totalPages | integer | Total number of pages available |
hasNextPage | boolean | Whether there are more pages after the current one |
hasPreviousPage | boolean | Whether there are pages before the current one |
Implementation Details
The pagination logic is implemented in service layer methods. Here’s how it works:- Default values: If
pageorlimitare not provided, defaults are used (page: 1, limit: 20) - Maximum limit: The limit is capped at 100 items to prevent performance issues
- Skip calculation:
skip = (page - 1) × limitdetermines how many records to skip
/home/daytona/workspace/source/src/modules/reviews/reviews.service.ts:13
Paginated Endpoints
The following endpoints support pagination:Reviews
Route Details (Nested Pagination)
reviewsPage- Page number for reviews (default: 1)reviewsLimit- Limit for reviews (default: 20, max: 100)photosLimit- Limit for photos (default: 10)
/home/daytona/workspace/source/src/modules/routes/routes.controller.ts:53
Best Practices
Start with Reasonable Limits
Use smaller page sizes for better performance:Check hasNextPage for Infinite Scroll
Calculate Total Pages
UsetotalPages to build page navigation:
Ordering
Paginated results are ordered bycreatedAt in descending order (newest first) by default:
