/** * Validation Utilities * * Функции для валидации данных. */ /** * Валидация JSON строки * @param {string} jsonString - JSON строка для валидации * @returns {{valid: boolean, error: string|null, data: object|null}} Результат валидации */ export function validateJSON(jsonString) { if (!jsonString || !jsonString.trim()) { return { valid: false, error: 'JSON не может быть пустым', data: null } } try { const data = JSON.parse(jsonString) return { valid: true, error: null, data } } catch (e) { return { valid: false, error: `Ошибка парсинга JSON: ${e.message}`, data: null } } } /** * Валидация формата логина (8 цифр) * @param {string} login - Логин для проверки * @returns {{valid: boolean, error: string|null}} Результат валидации */ export function validateLoginFormat(login) { if (!login || !login.trim()) { return { valid: false, error: 'Логин не может быть пустым' } } if (!/^[0-9]{8}$/.test(login)) { return { valid: false, error: 'Логин должен состоять из 8 цифр' } } return { valid: true, error: null } } /** * Валидация массива вопросов для запроса * @param {Array} questions - Массив вопросов * @returns {{valid: boolean, error: string|null}} Результат валидации */ export function validateQuestions(questions) { if (!Array.isArray(questions)) { return { valid: false, error: 'Вопросы должны быть массивом' } } if (questions.length === 0) { return { valid: false, error: 'Необходимо добавить хотя бы один вопрос' } } for (let i = 0; i < questions.length; i++) { const q = questions[i] if (!q.body || typeof q.body !== 'string' || !q.body.trim()) { return { valid: false, error: `Вопрос ${i + 1}: текст вопроса не может быть пустым` } } if (typeof q.with_docs !== 'boolean') { return { valid: false, error: `Вопрос ${i + 1}: поле with_docs должно быть boolean` } } } return { valid: true, error: null } } /** * Валидация окружения * @param {string} environment - Окружение для проверки * @returns {{valid: boolean, error: string|null}} Результат валидации */ export function validateEnvironment(environment) { const validEnvs = ['ift', 'psi', 'prod'] if (!environment) { return { valid: false, error: 'Окружение не может быть пустым' } } if (!validEnvs.includes(environment)) { return { valid: false, error: `Недопустимое окружение. Разрешены: ${validEnvs.join(', ')}` } } return { valid: true, error: null } }