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

    Variable UserQuerySchemaConst

    UserQuerySchema: 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"]>>>;
                role: ZodOptional<ZodEnum<["student", "content_creator", "admin"]>>;
                is_active: ZodEffects<
                    ZodOptional<ZodString>,
                    undefined | boolean,
                    undefined | string,
                >;
                search: ZodOptional<ZodString>;
            },
            "strip",
            ZodTypeAny,
            {
                page: number;
                limit: number;
                sortBy?: string;
                sortOrder: "asc"
                | "desc";
                role?: "student" | "content_creator" | "admin";
                is_active?: boolean;
                search?: string;
            },
            {
                page?: string;
                limit?: string;
                sortBy?: string;
                sortOrder?: "asc"
                | "desc";
                role?: "student" | "content_creator" | "admin";
                is_active?: string;
                search?: string;
            },
        >,
        {
            page: number;
            limit: number;
            sortBy?: string;
            sortOrder: "asc"
            | "desc";
            role?: "student" | "content_creator" | "admin";
            is_active?: boolean;
            search?: string;
        },
        {
            page?: string;
            limit?: string;
            sortBy?: string;
            sortOrder?: "asc"
            | "desc";
            role?: "student" | "content_creator" | "admin";
            is_active?: string;
            search?: string;
        },
    > = ...

    User query parameters validation schema for user discovery and management

    Comprehensive validation schema for query parameters used in user listing, search, and administrative management operations across the language learning platform. This schema combines standard pagination functionality with user-specific filtering options including role-based filtering, activity status filtering, and text-based search capabilities for efficient user discovery and management.

    The query schema supports administrative efficiency through role-based filtering for user management, activity status filtering for user engagement analysis, text search for user discovery, and flexible sorting for various administrative workflows. All parameters are optional to support flexible querying patterns and different user interface requirements.

    Administrative features include comprehensive user filtering for large user bases, efficient pagination for performance optimization, flexible search capabilities for user discovery, and role-based filtering for access control and user management workflows. The schema ensures efficient database operations while maintaining security and usability.

    Performance considerations include pagination limits to prevent excessive resource consumption, optional parameters to reduce query complexity, efficient filtering options that support database indexing, and search functionality that balances comprehensiveness with performance requirements.

    // Comprehensive user management query
    const userQuery = {
    page: '1',
    limit: '25',
    sortBy: 'registration_date',
    sortOrder: 'desc',
    role: 'student',
    is_active: 'true',
    search: 'maria'
    };

    const validatedQuery = UserQuerySchema.parse(userQuery);
    // Result: { page: 1, limit: 25, sortBy: 'registration_date', sortOrder: 'desc',
    // role: 'student', is_active: true, search: 'maria' }
    // Administrative user listing endpoint
    router.get('/users',
    authenticateToken,
    requireRole('admin'),
    validate({ query: UserQuerySchema }),
    async (req, res) => {
    const {
    page,
    limit,
    sortBy,
    sortOrder,
    role,
    is_active,
    search
    } = req.query;

    const queryOptions = {
    skip: (page - 1) * limit,
    take: limit,
    where: {
    ...(role && { role }),
    ...(is_active !== undefined && { is_active }),
    ...(search && {
    OR: [
    { username: { contains: search, mode: 'insensitive' } },
    { email: { contains: search, mode: 'insensitive' } }
    ]
    })
    },
    orderBy: sortBy ? { [sortBy]: sortOrder } : { registration_date: 'desc' }
    };

    const users = await userService.findMany(queryOptions);
    res.json({ users, pagination: { page, limit, sortBy, sortOrder } });
    }
    );
    // Role-specific user filtering
    const contentCreatorQuery = {
    role: 'content_creator',
    is_active: 'true',
    sortBy: 'last_login_date',
    sortOrder: 'desc',
    limit: '50'
    };
    // User search functionality
    const searchUsers = async (searchTerm: string) => {
    const searchQuery = {
    search: searchTerm,
    is_active: 'true',
    limit: '20',
    sortBy: 'username',
    sortOrder: 'asc'
    };

    const validation = UserQuerySchema.safeParse(searchQuery);
    if (!validation.success) {
    throw new ValidationError('Invalid search parameters');
    }

    return await userService.searchUsers(validation.data);
    };
    // Administrative dashboard queries
    const dashboardQueries = {
    activeStudents: {
    role: 'student',
    is_active: 'true',
    sortBy: 'registration_date',
    sortOrder: 'desc',
    limit: '100'
    },
    inactiveUsers: {
    is_active: 'false',
    sortBy: 'last_login_date',
    sortOrder: 'asc',
    limit: '50'
    },
    recentRegistrations: {
    sortBy: 'registration_date',
    sortOrder: 'desc',
    limit: '25'
    }
    };
    // Mobile admin app user management
    const mobileUserQuery = {
    page: '1',
    limit: '10', // Smaller batches for mobile
    sortBy: 'username',
    sortOrder: 'asc',
    is_active: 'true'
    };
    // Dynamic query building for user interfaces
    const buildUserQuery = (filters: any) => {
    const query: any = {
    page: filters.page || '1',
    limit: filters.limit || '20',
    sortBy: filters.sortBy || 'registration_date',
    sortOrder: filters.sortOrder || 'desc'
    };

    if (filters.role) query.role = filters.role;
    if (filters.activeOnly) query.is_active = 'true';
    if (filters.searchTerm) query.search = filters.searchTerm;

    const validation = UserQuerySchema.safeParse(query);
    return validation.success ? validation.data : null;
    };