backend: accept parenthetical variants in answer checking (use _isEquivalentAnswer)
Some checks failed
Deploy to production / deploy (push) Has been cancelled
Some checks failed
Deploy to production / deploy (push) Has been cancelled
This commit is contained in:
@@ -4065,7 +4065,6 @@ export default class VocabService {
|
||||
|
||||
// Für Lückentext: Normalisiere und vergleiche
|
||||
if (exerciseTypeId === 1) { // gap_fill
|
||||
const normalize = (str) => String(str || '').trim().toLowerCase();
|
||||
const correctAnswers = parsedAnswerData.answers || parsedAnswerData.correct || [];
|
||||
const correctAnswersArray = Array.isArray(correctAnswers) ? correctAnswers : [correctAnswers];
|
||||
|
||||
@@ -4074,12 +4073,11 @@ export default class VocabService {
|
||||
if (userAnswer.length !== correctAnswersArray.length) return false;
|
||||
return userAnswer.every((ans, idx) => {
|
||||
const correct = correctAnswersArray[idx];
|
||||
return normalize(ans) === normalize(correct);
|
||||
return this._isEquivalentAnswer(ans, correct);
|
||||
});
|
||||
} else {
|
||||
// Fallback: Einzelne Antwort
|
||||
const normalizedUserAnswer = normalize(userAnswer);
|
||||
return correctAnswersArray.some(correct => normalize(correct) === normalizedUserAnswer);
|
||||
return correctAnswersArray.some((correct) => this._isEquivalentAnswer(userAnswer, correct));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4110,20 +4108,19 @@ export default class VocabService {
|
||||
|
||||
if (parsedQuestionData.type === 'sentence_building' || parsedQuestionData.type === 'dialog_completion' || parsedQuestionData.type === 'situational_response' || parsedQuestionData.type === 'pattern_drill') {
|
||||
const candidateAnswers = parsedAnswerData.correct ?? parsedAnswerData.correctAnswer ?? parsedAnswerData.answers ?? parsedAnswerData.modelAnswer ?? [];
|
||||
const normalizedUser = this._normalizeTextAnswer(userAnswer);
|
||||
const answers = Array.isArray(candidateAnswers) ? candidateAnswers : [candidateAnswers];
|
||||
|
||||
if (parsedQuestionData.type === 'situational_response') {
|
||||
const keywords = parsedQuestionData.keywords || parsedAnswerData.keywords || [];
|
||||
if (keywords.length > 0) {
|
||||
const normalizedUser = this._normalizeTextAnswer(userAnswer);
|
||||
return keywords.every((keyword) => normalizedUser.includes(this._normalizeTextAnswer(keyword)));
|
||||
}
|
||||
}
|
||||
|
||||
return answers
|
||||
.map((answer) => this._normalizeTextAnswer(answer))
|
||||
.filter(Boolean)
|
||||
.some((answer) => answer === normalizedUser);
|
||||
.some((answer) => this._isEquivalentAnswer(userAnswer, answer));
|
||||
}
|
||||
|
||||
// Für andere Typen: einfacher String-Vergleich inkl. hinterlegter Alternativen
|
||||
@@ -4133,8 +4130,9 @@ export default class VocabService {
|
||||
? parsedAnswerData.alternatives
|
||||
: [];
|
||||
const correctAnswersArray = [...primaryAnswersArray, ...alternativeAnswersArray];
|
||||
const normalizedUserAnswer = this._normalizeTextAnswer(userAnswer);
|
||||
return correctAnswersArray.some(correct => this._normalizeTextAnswer(correct) === normalizedUserAnswer);
|
||||
return correctAnswersArray
|
||||
.filter(Boolean)
|
||||
.some((correct) => this._isEquivalentAnswer(userAnswer, correct));
|
||||
}
|
||||
|
||||
async getGrammarExerciseProgress(hashedUserId, lessonId) {
|
||||
|
||||
Reference in New Issue
Block a user