sto-k-odnomu/backend/src/utils/question-utils.ts
2026-01-10 22:03:40 +03:00

53 lines
1.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
};
});
}