Files
2025-11-06 11:08:59 +01:00

88 lines
2.4 KiB
JavaScript

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
};