import { randomUUID } from 'crypto'; export interface Answer { id?: string; text: string; points: number; } export interface Question { id?: string; text?: string; answers: Answer[]; } /** * Проверяет, является ли строка валидным UUID */ function isValidUUID(id: string | number | undefined): boolean { if (!id || typeof id !== 'string') { return false; } // UUID v4 формат: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; return uuidRegex.test(id); } /** * Добавляет UUID к вопросам и ответам, если их нет или они невалидны * @param questions - Массив вопросов * @returns Массив вопросов с добавленными UUID */ export function ensureQuestionIds(questions: Question[]): Question[] { return questions.map((question) => { // Если ID нет или не является валидным UUID, создаем новый const questionId = (question.id && isValidUUID(question.id)) ? question.id : randomUUID(); const questionText = question.text || ''; const answersWithIds = question.answers.map((answer) => { // Если ID нет или не является валидным UUID, создаем новый const answerId = (answer.id && isValidUUID(answer.id)) ? answer.id : randomUUID(); return { ...answer, id: answerId, }; }); return { id: questionId, text: questionText, answers: answersWithIds, }; }); }