40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
|
|
import { randomUUID } from 'crypto';
|
|||
|
|
|
|||
|
|
interface Answer {
|
|||
|
|
id?: string;
|
|||
|
|
text: string;
|
|||
|
|
points: number;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
interface Question {
|
|||
|
|
id?: string;
|
|||
|
|
text?: string;
|
|||
|
|
question?: string; // Поддержка обоих вариантов названия поля
|
|||
|
|
answers: Answer[];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Добавляет UUID к вопросам и ответам, если их нет
|
|||
|
|
* @param questions - Массив вопросов
|
|||
|
|
* @returns Массив вопросов с добавленными UUID
|
|||
|
|
*/
|
|||
|
|
export function ensureQuestionIds(questions: Question[]): Question[] {
|
|||
|
|
return questions.map((question) => {
|
|||
|
|
const questionId = question.id || randomUUID();
|
|||
|
|
const questionText = question.text || question.question || '';
|
|||
|
|
|
|||
|
|
const answersWithIds = question.answers.map((answer) => ({
|
|||
|
|
...answer,
|
|||
|
|
id: answer.id || randomUUID(),
|
|||
|
|
}));
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
...question,
|
|||
|
|
id: questionId,
|
|||
|
|
text: questionText,
|
|||
|
|
question: questionText, // Сохраняем оба поля для совместимости
|
|||
|
|
answers: answersWithIds,
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
}
|