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

    Variable PaginationSchemaConst

    PaginationSchema: ZodEffects<
        ZodObject<
            {
                page: ZodEffects<ZodOptional<ZodString>, number, undefined | string>;
                limit: ZodEffects<ZodOptional<ZodString>, number, undefined | string>;
                sortBy: ZodOptional<ZodString>;
                sortOrder: ZodDefault<ZodOptional<ZodEnum<["asc", "desc"]>>>;
            },
            "strip",
            ZodTypeAny,
            {
                page: number;
                limit: number;
                sortBy?: string;
                sortOrder: "asc"
                | "desc";
            },
            {
                page?: string;
                limit?: string;
                sortBy?: string;
                sortOrder?: "asc"
                | "desc";
            },
        >,
        { page: number; limit: number; sortBy?: string; sortOrder: "asc"
        | "desc" },
        {
            page?: string;
            limit?: string;
            sortBy?: string;
            sortOrder?: "asc" | "desc";
        },
    > = ...

    Complete pagination schema with business rule validation

    Enhanced pagination schema that extends BasePaginationSchema with comprehensive business rule validation to ensure pagination parameters are within acceptable ranges for application performance and security. This schema prevents common pagination-related vulnerabilities and performance issues while maintaining usability for legitimate use cases.

    The validation rules enforce minimum page number of 1 to prevent negative or zero page requests that could cause application errors, minimum limit of 1 to ensure meaningful results, and maximum limit of 100 to prevent excessive resource consumption and potential denial-of-service attacks through large result set requests.

    These constraints balance user flexibility with system performance and security, allowing reasonable pagination ranges while protecting against abuse. The limits are designed to accommodate typical user interface patterns while preventing resource exhaustion in high-traffic scenarios.

    // Valid pagination parameters
    const validParams = { page: '1', limit: '25', sortBy: 'created_at', sortOrder: 'desc' };
    const result = PaginationSchema.parse(validParams);
    // Result: { page: 1, limit: 25, sortBy: 'created_at', sortOrder: 'desc' }
    // Usage in API endpoints
    router.get('/courses', validate({ query: PaginationSchema }), (req, res) => {
    const { page, limit, sortBy, sortOrder } = req.query;
    // All parameters are properly typed and validated
    const courses = await courseService.findMany({
    skip: (page - 1) * limit,
    take: limit,
    orderBy: sortBy ? { [sortBy]: sortOrder } : { created_at: 'desc' }
    });
    res.json({ courses, pagination: { page, limit, sortBy, sortOrder } });
    });
    // Error handling for invalid parameters
    try {
    const result = PaginationSchema.parse({ page: '0', limit: '200' });
    } catch (error) {
    // Throws: "Page must be >= 1 and limit must be between 1 and 100"
    }