UNPKG

agile-planner-mcp-server

Version:

Serveur MCP pour la génération d'artefacts agiles (backlogs, features, user stories) avec IA - compatible Windsurf, Claude et Cursor

83 lines (72 loc) 2.42 kB
/** * Module de validation des epics - Stratégie spécifique * @module epic-validator */ const { SchemaValidatorStrategy } = require('./schema-validator-strategy'); const { FeatureValidator } = require('./feature-validator'); /** * Classe spécialisée pour la validation des epics * Implémente le pattern Strategy avec une stratégie spécifique */ class EpicValidator extends SchemaValidatorStrategy { /** * Crée une instance de EpicValidator */ constructor() { super(); this.featureValidator = new FeatureValidator(); this.schema = this.createEpicSchema(); } /** * Crée le schéma pour un epic * @returns {Object} Schéma pour un epic */ createEpicSchema() { return { required: ['id', 'title'], properties: { id: { type: 'string' }, title: { type: 'string' }, description: { type: 'string' }, features: { type: 'array', items: this.featureValidator.schema } } }; } /** * Valide un epic et ses features * @param {Object} epic - Epic à valider * @returns {Object} Résultat de validation {valid, errors?} */ validate(epic) { // Vérification de la structure de base de l'epic const baseResult = this.validateAgainstSchema(epic, this.schema); if (!baseResult.valid) { return baseResult; } // Si l'epic est valide, on vérifie chaque feature individuellement if (epic.features && Array.isArray(epic.features)) { const errors = []; for (let i = 0; i < epic.features.length; i++) { const feature = epic.features[i]; const featureResult = this.featureValidator.validate(feature); if (!featureResult.valid && featureResult.errors) { // Ajouter le préfixe du chemin pour chaque erreur const prefixedErrors = featureResult.errors.map( err => err.replace('à /', `à /features[${i}]/`) ); errors.push(...prefixedErrors); } } if (errors.length > 0) { // Formatage des erreurs pour compatibilité const formattedErrors = this.formatErrorsForCompatibility(errors, 'features'); return { valid: false, errors: formattedErrors }; } } return { valid: true }; } } module.exports = { EpicValidator };