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

    Variable CourseSchemaConst

    CourseSchema: ZodEffects<
        ZodObject<
            {
                id: ZodString;
                source_language: ZodString;
                target_language: ZodString;
                name: ZodString;
                description: ZodOptional<ZodString>;
                is_public: ZodDefault<ZodBoolean>;
            },
            "strip",
            ZodTypeAny,
            {
                id: string;
                source_language: string;
                target_language: string;
                name: string;
                description?: string;
                is_public: boolean;
            },
            {
                id: string;
                source_language: string;
                target_language: string;
                name: string;
                description?: string;
                is_public?: boolean;
            },
        >,
        {
            id: string;
            source_language: string;
            target_language: string;
            name: string;
            description?: string;
            is_public: boolean;
        },
        {
            id: string;
            source_language: string;
            target_language: string;
            name: string;
            description?: string;
            is_public?: boolean;
        },
    > = ...

    Course validation schema for language learning course creation and management

    Comprehensive validation schema for language learning courses that form the top level of the content hierarchy in the WayrApp platform. This schema ensures courses have proper identification, language pair configuration, descriptive content, and visibility settings while enforcing educational constraints and security requirements.

    The course schema implements several critical validations including URL-safe ID format that supports clean URLs and database indexing, language pair validation that prevents illogical same-language courses, content length limits that balance descriptiveness with performance, and visibility controls that support both public and private course offerings.

    Educational constraints include the requirement that source and target languages must be different to ensure meaningful language learning experiences, proper ID formatting that supports hierarchical content organization, and flexible description fields that accommodate various course marketing and educational needs.

    Security features include ID format validation to prevent injection attacks and ensure URL safety, input sanitization through text field validation, length limits to prevent denial-of-service attacks, and comprehensive validation of language codes to ensure proper internationalization support.

    // Valid course creation
    const courseData = {
    id: 'qu-es-beginner',
    source_language: 'qu',
    target_language: 'es-ES',
    name: 'Quechua for Spanish Speakers',
    description: 'Learn basic Quechua vocabulary and grammar for Spanish speakers',
    is_public: true
    };

    const result = CourseSchema.parse(courseData);
    console.log('Valid course:', result);
    // Course creation endpoint with validation
    router.post('/courses', validate({ body: CourseSchema }), async (req, res) => {
    const courseData = req.body; // Fully validated course data
    const course = await courseService.create(courseData);
    res.status(201).json({ course });
    });
    // Multi-language course catalog
    const courseCatalog = [
    {
    id: 'qu-es-basic',
    source_language: 'qu',
    target_language: 'es',
    name: 'Basic Quechua',
    description: 'Introduction to Quechua language',
    is_public: true
    },
    {
    id: 'aym-es-intermediate',
    source_language: 'aym',
    target_language: 'es-419',
    name: 'Intermediate Aymara',
    description: 'Advanced Aymara for Latin American Spanish speakers',
    is_public: false
    }
    ];

    courseCatalog.forEach(course => {
    const validation = CourseSchema.safeParse(course);
    if (validation.success) {
    console.log(`Course ${course.id} is valid`);
    }
    });
    // Error handling for invalid courses
    try {
    CourseSchema.parse({
    id: 'qu-qu-invalid', // Same source and target language
    source_language: 'qu',
    target_language: 'qu',
    name: 'Invalid Course'
    });
    } catch (error) {
    // Throws: "Source and target languages must be different"
    }
    // Course update with partial validation
    const updateCourseData = {
    name: 'Updated Course Name',
    description: 'Updated course description with more details',
    is_public: false
    };

    const UpdateCourseSchema = CourseSchema.partial().omit({ id: true });
    const validatedUpdate = UpdateCourseSchema.parse(updateCourseData);