const Joi = require('joi'); const validate = (schema) => { return (req, res, next) => { const { error } = schema.validate(req.body); if (error) { return res.status(400).json({ success: false, error: error.details[0].message }); } next(); }; }; // Validation schemas const schemas = { register: Joi.object({ email: Joi.string().email().required(), password: Joi.string().min(6).required(), firstName: Joi.string().min(2).required(), lastName: Joi.string().min(2).required(), role: Joi.string().valid('user', 'admin', 'expert').optional() }), login: Joi.object({ email: Joi.string().email().required(), password: Joi.string().required() }), updateProfile: Joi.object({ firstName: Joi.string().min(2).optional(), lastName: Joi.string().min(2).optional(), preferences: Joi.object().optional() }), createConversation: Joi.object({ title: Joi.string().min(1).optional() }), sendMessage: Joi.object({ conversationId: Joi.string().uuid().required(), content: Joi.string().min(1).required(), messageType: Joi.string().valid('text', 'plan', 'execution', 'feedback').optional() }), submitFeedback: Joi.object({ messageId: Joi.string().uuid().optional(), feedbackType: Joi.string().valid('positive', 'negative', 'correction', 'suggestion').required(), rating: Joi.number().min(1).max(5).optional(), comment: Joi.string().optional(), correctedContent: Joi.string().optional() }), createModelVersion: Joi.object({ modelName: Joi.string().min(1).required(), modelType: Joi.string().valid('MODEL1', 'QUERYMODEL').required(), baseModel: Joi.string().min(1).required(), fineTuningMethod: Joi.string().valid('SFT', 'DPO', 'PPO', 'LoRA', 'QLoRA').optional(), hyperparameters: Joi.object().optional() }), executeTool: Joi.object({ planId: Joi.string().uuid().required(), toolName: Joi.string().min(1).required(), toolType: Joi.string().valid('query_expander', 'extraction', 'report1', 'report2', 'web_search', 'encyclopedia_pdf').required(), inputParameters: Joi.object().required() }), generatePlan: Joi.object({ query: Joi.string().min(1).required(), conversationId: Joi.string().uuid().optional(), context: Joi.object().optional() }), executePlan: Joi.object({ planId: Joi.string().uuid().required(), options: Joi.object().optional() }) }; module.exports = { validate, schemas };