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

    Variable ContentQuerySchemaConst

    ContentQuerySchema: 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"]>>>;
                is_public: ZodEffects<
                    ZodOptional<ZodString>,
                    undefined | boolean,
                    undefined | string,
                >;
                search: ZodOptional<ZodString>;
                source_language: ZodOptional<ZodString>;
                target_language: ZodOptional<ZodString>;
            },
            "strip",
            ZodTypeAny,
            {
                page: number;
                limit: number;
                sortBy?: string;
                sortOrder: "asc"
                | "desc";
                is_public?: boolean;
                search?: string;
                source_language?: string;
                target_language?: string;
            },
            {
                page?: string;
                limit?: string;
                sortBy?: string;
                sortOrder?: "asc"
                | "desc";
                is_public?: string;
                search?: string;
                source_language?: string;
                target_language?: string;
            },
        >,
        {
            page: number;
            limit: number;
            sortBy?: string;
            sortOrder: "asc"
            | "desc";
            is_public?: boolean;
            search?: string;
            source_language?: string;
            target_language?: string;
        },
        {
            page?: string;
            limit?: string;
            sortBy?: string;
            sortOrder?: "asc"
            | "desc";
            is_public?: string;
            search?: string;
            source_language?: string;
            target_language?: string;
        },
    > = ...

    Content query parameters validation schema for content discovery and filtering

    Comprehensive validation schema for query parameters used in content discovery, search, and filtering operations across the learning platform. This schema combines standard pagination functionality with content-specific filtering options, supporting efficient content browsing and discovery while maintaining performance and security constraints.

    The query schema includes pagination controls for efficient data loading, content-specific filters for targeted discovery, search functionality for text-based content finding, and language-based filtering for multilingual content organization. All parameters are optional to support flexible querying patterns.

    Performance considerations include pagination limits to prevent excessive resource consumption, optional parameters to reduce query complexity, and efficient filtering options that support database indexing and optimization strategies.

    // Content discovery with multiple filters
    const contentQuery = {
    page: '1',
    limit: '20',
    sortBy: 'name',
    sortOrder: 'asc',
    is_public: 'true',
    search: 'beginner spanish',
    source_language: 'en',
    target_language: 'es'
    };

    const validatedQuery = ContentQuerySchema.parse(contentQuery);
    // Result: { page: 1, limit: 20, sortBy: 'name', sortOrder: 'asc', is_public: true, ... }
    // Content search endpoint with comprehensive filtering
    router.get('/content/search',
    validate({ query: ContentQuerySchema }),
    async (req, res) => {
    const {
    page,
    limit,
    sortBy,
    sortOrder,
    is_public,
    search,
    source_language,
    target_language
    } = req.query;

    const searchOptions = {
    skip: (page - 1) * limit,
    take: limit,
    where: {
    ...(is_public !== undefined && { is_public }),
    ...(source_language && { source_language }),
    ...(target_language && { target_language }),
    ...(search && {
    OR: [
    { name: { contains: search, mode: 'insensitive' } },
    { description: { contains: search, mode: 'insensitive' } }
    ]
    })
    },
    orderBy: sortBy ? { [sortBy]: sortOrder } : { created_at: 'desc' }
    };

    const content = await contentService.findMany(searchOptions);
    res.json({ content, pagination: { page, limit, sortBy, sortOrder } });
    }
    );
    // Language-specific content filtering
    const languageQuery = {
    source_language: 'qu', // Quechua content
    target_language: 'es-PE', // For Peruvian Spanish speakers
    is_public: 'true',
    limit: '50'
    };
    // Content management dashboard queries
    const adminQuery = {
    page: '1',
    limit: '100',
    sortBy: 'updated_at',
    sortOrder: 'desc',
    is_public: 'false', // Private content only
    search: 'draft'
    };
    // Mobile app content loading with pagination
    const mobileQuery = {
    page: '1',
    limit: '10', // Smaller batches for mobile
    is_public: 'true',
    source_language: userPreferences.nativeLanguage,
    target_language: userPreferences.learningLanguage
    };