WayrApp Backend & Ecosystem Documentation - v1.0.0
    Preparing search index...

    Module Pagination

    Comprehensive pagination middleware and utilities for WayrApp backend API endpoints.

    This module provides a complete pagination solution supporting both traditional page-based and modern offset-based pagination strategies. It serves as the central pagination layer for all API endpoints requiring data pagination, filtering, sorting, and search capabilities. The middleware automatically validates query parameters, normalizes pagination options, and provides utilities for building database queries and response headers.

    Key architectural features include dual pagination strategy support (page/offset), comprehensive query parameter validation using Zod schemas, flexible filtering and sorting with configurable allowed fields, full-text search capabilities across multiple fields, and RFC 5988 compliant Link headers for API navigation. The module integrates seamlessly with Prisma ORM and Express.js middleware patterns.

    The pagination system is designed for high-performance content delivery in the language learning platform, supporting course listings, exercise collections, user progress tracking, and administrative content management interfaces. All utilities generate Prisma-compatible query objects and provide consistent response formatting across the entire application.

    Exequiel Trujillo

    1.0.0

    // Basic pagination middleware usage in routes
    import { paginationMiddleware } from '@/shared/middleware/pagination';

    router.get('/courses',
    paginationMiddleware({
    allowedSortFields: ['name', 'created_at'],
    defaultSortField: 'created_at',
    allowedFilters: ['source_language', 'target_language'],
    searchFields: ['name', 'description']
    }),
    courseController.getCourses
    );
    // Using pagination utilities in service layer
    import { getPaginationParams, getSortParams, buildTextSearchFilter } from '@/shared/middleware/pagination';

    const { skip, take } = getPaginationParams(page, limit);
    const orderBy = getSortParams(sortBy, sortOrder);
    const searchFilter = buildTextSearchFilter(search, ['name', 'description']);

    Interfaces

    PaginationOptions

    Functions

    paginationMiddleware
    addPaginationHeaders
    createPaginationMeta
    getPaginationParams
    getSortParams
    buildTextSearchFilter
    buildRangeFilter
    buildEnumFilter
    buildCursorPagination