diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 5508539f..4770d5e7 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -46,6 +46,7 @@ app.get('/getQuestion', async (req, res) => { try { // llamamos al servicio de preguntas const questionResponse = await axios.get(questionServiceUrl+'/getQuestion', req.body); + res.json(questionResponse.data); } catch (error) { res.status(error.response.status).json({ error: error.response.data.error }); diff --git a/questionsService/obtenerPreguntasBaseDatos.js b/questionsService/obtenerPreguntasBaseDatos.js index c035946f..d8031147 100644 --- a/questionsService/obtenerPreguntasBaseDatos.js +++ b/questionsService/obtenerPreguntasBaseDatos.js @@ -20,13 +20,15 @@ class ObtenerPreguntas{ { $sample: { size: 3 } } ]); - return resultado = { - pregunta: pregunta.textoPregunta, - correcta: pregunta.respuestaCorrecta, + resultado = { + pregunta: pregunta[0].textoPregunta, + correcta: pregunta[0].respuestaCorrecta, respuestasIncorrecta1: respuestas[0].textoRespuesta, respuestasIncorrecta2: respuestas[1].textoRespuesta, respuestasIncorrecta3: respuestas[2].textoRespuesta }; + + return resultado; } } diff --git a/questionsService/obtenerPreguntasWikidata.js b/questionsService/obtenerPreguntasWikidata.js index c5579728..2e9f940e 100644 --- a/questionsService/obtenerPreguntasWikidata.js +++ b/questionsService/obtenerPreguntasWikidata.js @@ -140,9 +140,17 @@ class ObtenerPreguntaWikiData { obtenemos el valor que queremos de la entidad */ obtenerValorPropiedad(binding, propertyName) { - //si tiene la + //si tiene la propiedad if (binding && binding.hasOwnProperty(propertyName)) { + //comprobamos si es una fecha + if(this.esFormatoISO8601(binding[propertyName].value)){ + //devolvemos la fecha formateada + return this.formatearFecha(binding[propertyName].value); + } + //si no es una fecha devolvemos el valor + else{ return binding[propertyName].value; + } } else { return "Ninguna de las anteriores"; } @@ -170,9 +178,11 @@ class ObtenerPreguntaWikiData { //obtenemos el esqueleto de la pregunta que queremos hacer var textoPregunta = this.obtenerTextoPregunta(result, this.question, this.type); + //para comprobar si es un Q + var regex = /^Q\d+/; //comprobamos que el resultado es valido para hacer la pregunta (que no sea QXXXXX) var preguntaCorrecta = this.answers.find(entidad => { - return entidad.label !== "Ninguna de las anteriores"; + return entidad.label !== "Ninguna de las anteriores" && !regex.test(entidad.label); }); if(preguntaCorrecta){ @@ -184,7 +194,12 @@ class ObtenerPreguntaWikiData { this.generarPregunta(consulta, respuestaCorrecta) .then(() => resolve()) .catch(error => reject(error)); - } + } + + //si no hay pregunta resolvemos la promesa + else{ + resolve(); + } }); }); }); @@ -229,15 +244,39 @@ class ObtenerPreguntaWikiData { type: this.type } - console.log(this.finalQuestion); - resolve(); }); } + /* + obtenemos la pregunta que hemos generado + */ obtenerPregunta(){ return this.finalQuestion; } + + /* + comprobamos si es una fecha en formato ISO 8601 + */ + esFormatoISO8601(cadena) { + // Expresión regular para el formato ISO 8601 + var formatoISO8601 = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/; + return formatoISO8601.test(cadena); + } + + /* + formateamos la fecha a un formato más legible + */ + formatearFecha(fechaISO8601) { + var meses = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"]; + var fecha = new Date(fechaISO8601); + var dia = fecha.getDate(); + var mes = meses[fecha.getMonth()]; + var año = fecha.getFullYear(); + return dia + " de " + mes + " de " + año; + } + + } module.exports = ObtenerPreguntaWikiData; \ No newline at end of file diff --git a/questionsService/question-service.js b/questionsService/question-service.js index fdda07a5..46c57290 100644 --- a/questionsService/question-service.js +++ b/questionsService/question-service.js @@ -25,9 +25,7 @@ mongoose.connect(mongoUri); app.get('/getQuestion', async(req,res)=> { try{ //coger pregunta bd - console.log("LLegamos al question service") - const questions = question.obtenerPregunta(); - + const questions = await question.obtenerPregunta(); //para devolver la pregunta res.json(questions); diff --git a/questionsService/questionGeneration.js b/questionsService/questionGeneration.js index 4a99cb22..3f92302d 100644 --- a/questionsService/questionGeneration.js +++ b/questionsService/questionGeneration.js @@ -8,7 +8,11 @@ class GenerarPregunta { // Método para ejecutar las operaciones async ejecutarOperaciones() { await preguntaWiki.leerYSacarConsultas(); - guardarPregunta.guardarEnBaseDatos(preguntaWiki.obtenerPregunta()); + + //si se ha generado pregunta, guardarla en la base de datos + if (preguntaWiki.obtenerPregunta() !== undefined) { + guardarPregunta.guardarEnBaseDatos(preguntaWiki.obtenerPregunta()); + } } } diff --git a/webapp/src/components/QuestionArea.jsx b/webapp/src/components/QuestionArea.jsx index 57eb8d3c..526a20ae 100644 --- a/webapp/src/components/QuestionArea.jsx +++ b/webapp/src/components/QuestionArea.jsx @@ -8,16 +8,23 @@ export function QuestionArea(){ const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; // Estado para almacenar los datos de la pregunta - const [questionData, setQuestionData] = useState(null); + const [questionJson, setQuestionData] = useState(null); + // Estado para almacenar las respuestas + const [respuestas, setRespuestas] = useState([]); // Función para llamar al servicio y obtener los datos de la pregunta const fetchQuestionData = async () => { - try { + try { // Llamada al servicio para obtener los datos de la pregunta (aquí asumiendo que el servicio devuelve un JSON) - const response = await axios.get(`${apiEndpoint}/question`); - const data = await response.json(); + const response = await axios.get(`${apiEndpoint}/getQuestion`); + const data = response.data; setQuestionData(data); // Actualizar el estado con los datos de la pregunta obtenidos del servicio - } catch (error) { + + //calcular respuestas + const respuestasArray = [data.correcta, data.respuestasIncorrecta1, data.respuestasIncorrecta2, data.respuestasIncorrecta3]; + setRespuestas(respuestasArray); + + } catch (error) { console.error('Error fetching question data:', error); } }; @@ -27,7 +34,7 @@ export function QuestionArea(){ fetchQuestionData(); }, []); // El array vacío asegura que esto solo se ejecute una vez al montar el componente - + /* const questionJson = { "pregunta": "What is the capital of France?", "correcta": "Paris", @@ -35,8 +42,9 @@ export function QuestionArea(){ "respuestasIncorrecta2": "Berlin", "respuestasIncorrecta3": "Madrid" } + */ - const respuestas = [questionJson.correcta,questionJson.respuestasIncorrecta1,questionJson.respuestasIncorrecta2,questionJson.respuestasIncorrecta3]; + //const respuestas = [questionJson.correcta,questionJson.respuestasIncorrecta1,questionJson.respuestasIncorrecta2,questionJson.respuestasIncorrecta3]; return( @@ -48,7 +56,9 @@ export function QuestionArea(){ {/* Renderizar las respuestas de la pregunta */} ) : ( -

Cargando...

// Mensaje de carga mientras se obtienen los datos + <> +

Cargando...

{/* Mensaje de carga mientras se obtienen los datos */} + )} )