const { body, param, query, validationResult } = require('express-validator'); // Input validation middleware const handleValidationErrors = (req, res, next) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ error: 'Validation failed', details: errors.array() }); } next(); }; // User registration validation const validateUserRegistration = [ body('email').isEmail().normalizeEmail(), body('password').isLength({ min: 8 }).withMessage('Password must be at least 8 characters'), body('firstName').trim().isLength({ min: 1, max: 100 }), body('lastName').trim().isLength({ min: 1, max: 100 }), body('role').isIn(['admin', 'recruiter', 'employer', 'candidate']), handleValidationErrors ]; // Job creation validation const validateJobCreation = [ body('title').trim().isLength({ min: 1, max: 200 }), body('description').trim().isLength({ min: 1, max: 5000 }), body('location').trim().isLength({ min: 1, max: 200 }), body('salaryMin').optional().isInt({ min: 0 }), body('salaryMax').optional().isInt({ min: 0 }), body('experienceLevel').isIn(['entry', 'mid', 'senior', 'executive']), body('employmentType').isIn(['full-time', 'part-time', 'contract', 'internship']), handleValidationErrors ]; // UUID parameter validation const validateUUID = [ param('id').isUUID(), handleValidationErrors ]; // Pagination validation const validatePagination = [ query('page').optional().isInt({ min: 1 }), query('limit').optional().isInt({ min: 1, max: 100 }), handleValidationErrors ]; // File upload validation const validateFileUpload = (req, res, next) => { if (!req.file) { return res.status(400).json({ error: 'No file uploaded' }); } const allowedTypes = [ 'application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'text/plain' ]; if (!allowedTypes.includes(req.file.mimetype)) { return res.status(400).json({ error: 'Invalid file type' }); } if (req.file.size > 10 * 1024 * 1024) { // 10MB limit return res.status(400).json({ error: 'File size too large' }); } next(); }; module.exports = { handleValidationErrors, validateUserRegistration, validateJobCreation, validateUUID, validatePagination, validateFileUpload };