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

    Module validation

    Request validation middleware system for WayrApp Backend API

    This module provides comprehensive request validation capabilities for the WayrApp language learning platform, utilizing Zod schemas to ensure data integrity and security across all API endpoints. The validation system serves as a critical security layer, preventing malformed or malicious data from reaching business logic layers and ensuring consistent data structures throughout the application.

    The module offers flexible validation options for different parts of HTTP requests (body, parameters, query strings) and integrates seamlessly with the Express middleware stack. It automatically transforms and validates incoming data according to predefined schemas, providing immediate feedback for validation failures while maintaining high performance through efficient schema compilation and caching.

    Key architectural features include automatic error handling integration with the global error handler, support for complex nested validation schemas, automatic type coercion and transformation, and comprehensive error reporting that helps developers identify and fix validation issues quickly. The system is designed to scale with the application's growth toward a distributed architecture, ensuring consistent validation behavior across multiple nodes and services.

    Security considerations include protection against injection attacks through strict schema validation, prevention of data type confusion attacks, automatic sanitization of input data, and comprehensive logging of validation failures for security monitoring. The module also includes safeguards against denial-of-service attacks through request size validation and schema complexity limits.

    Exequiel Trujillo

    1.0.0

    // Basic usage with body validation
    import { validate } from '@/shared/middleware/validation';
    import { z } from 'zod';

    const userSchema = z.object({
    name: z.string().min(1).max(100),
    email: z.string().email(),
    age: z.number().int().min(13).max(120)
    });

    router.post('/users', validate({ body: userSchema }), userController.create);
    // Multi-part validation (body, params, query)
    const courseUpdateSchema = {
    params: z.object({ id: z.string().uuid() }),
    body: z.object({ title: z.string().min(1) }),
    query: z.object({ notify: z.boolean().optional() })
    };

    router.put('/courses/:id', validate(courseUpdateSchema), courseController.update);
    // Using convenience functions
    import { validateBody, validateParams, validateQuery } from '@/shared/middleware/validation';

    router.get('/courses/:id', validateParams(z.object({ id: z.string().uuid() })), courseController.get);
    router.post('/courses', validateBody(courseSchema), courseController.create);
    router.get('/courses', validateQuery(paginationSchema), courseController.list);

    Functions

    validate
    validateBody
    validateParams
    validateQuery