From e78a04489fba65400fb96a02aba4f8950bf6b0f1 Mon Sep 17 00:00:00 2001 From: UO289432 Date: Wed, 24 Apr 2024 23:12:35 +0200 Subject: [PATCH] Modificada API para evitar respuestas duplicadas --- questionservice/server.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/questionservice/server.js b/questionservice/server.js index 28e42c2..229d570 100644 --- a/questionservice/server.js +++ b/questionservice/server.js @@ -37,6 +37,7 @@ app.get('/pregunta', async (req, res) => { // Extraemos los resultados de la consulta const bindings = response.data.results.bindings; + // Patrón para identificar los códigos de Wikidata let wikidataCodePattern = /^Q\d+$/; let correctAnswer = null; let correctAnswerIndex = 0; @@ -48,7 +49,7 @@ app.get('/pregunta', async (req, res) => { correctAnswerIndex = Math.floor(randomValue * bindings.length); // Obtenemos la respuesta correcta correctAnswer = bindings[correctAnswerIndex]; - } while (wikidataCodePattern.test(correctAnswer.questionSubjectLabel.value)); + } while (wikidataCodePattern.test(correctAnswer.questionSubjectLabel.value) || wikidataCodePattern.test(correctAnswer.answerSubjectLabel.value)); // Creamos la pregunta const question = questionItem.question.replace('{sujetoPregunta}', correctAnswer.questionSubjectLabel.value); @@ -60,11 +61,12 @@ app.get('/pregunta', async (req, res) => { for (let i = 0; i < 3; i++) { let randomIndex; do { - buf = crypto.randomBytes(1) - randomValue = buf[0]/255 - // Seleccionamos un índice aleatorio distinto al de la respuesta correcta - randomIndex = Math.floor(randomValue * bindings.length); - } while (randomIndex === correctAnswerIndex); + buf = crypto.randomBytes(1) + randomValue = buf[0]/255 + // Seleccionamos un índice aleatorio distinto al de la respuesta correcta + randomIndex = Math.floor(randomValue * bindings.length); + } while (randomIndex === correctAnswerIndex || wikidataCodePattern.test(bindings[randomIndex].answerSubjectLabel.value) + || answers.includes(bindings[randomIndex].answerSubjectLabel.value)); // Añadimos la capital del país seleccionado aleatoriamente a las respuestas answers.push(bindings[randomIndex].answerSubjectLabel.value); }