brief-rags-bench/static/js/utils/validation.utils.js

134 lines
3.1 KiB
JavaScript

/**
* 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
}
}