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

70 lines (59 loc) 2.09 kB
const { SchemaValidatorStrategy } = require('./schema-validator-strategy'); const { UserStoryValidator } = require('./user-story-validator'); class IterationValidator extends SchemaValidatorStrategy { constructor() { super(); this.userStoryValidator = new UserStoryValidator(); this.schema = this.createIterationSchema(); } createIterationSchema() { return { required: ['name', 'stories'], properties: { name: { type: 'string' }, description: { type: 'string' }, startDate: { type: 'string' }, endDate: { type: 'string' }, stories: { type: 'array', items: { required: ['id', 'title'], properties: { id: { type: 'string' }, title: { type: 'string' } } } } } }; } validate(iteration) { // Vérification de la structure de base de l'itération const baseResult = this.validateAgainstSchema(iteration, this.schema); if (!baseResult.valid) { return baseResult; } // Si l'itération est valide, on vérifie chaque user story if (iteration.stories && Array.isArray(iteration.stories)) { const errors = []; for (let i = 0; i < iteration.stories.length; i++) { const story = iteration.stories[i]; // Vérification minimale des propriétés requises if (!story.id) { // Format compatible avec les tests existants errors.push(`La user story à l'index ${i} doit avoir un ID`); } if (!story.title) { errors.push(`La user story à l'index ${i} doit avoir un titre`); } } if (errors.length > 0) { // Formatage des erreurs pour compatibilité const formattedErrors = this.formatErrorsForCompatibility(errors, 'stories'); return { valid: false, errors: formattedErrors }; } } return { valid: true }; } } module.exports = { IterationValidator };