Skip to content

Commit

Permalink
Merge pull request #78 from Arquisoft/sonia
Browse files Browse the repository at this point in the history
Añadida llamada a la API de generar preguntas y arreglos en el formato de las fechas
  • Loading branch information
UO283535 authored Mar 11, 2024
2 parents ded8413 + 9895aab commit 6e0a01f
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 20 deletions.
1 change: 1 addition & 0 deletions gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 });
Expand Down
8 changes: 5 additions & 3 deletions questionsService/obtenerPreguntasBaseDatos.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}

Expand Down
49 changes: 44 additions & 5 deletions questionsService/obtenerPreguntasWikidata.js
Original file line number Diff line number Diff line change
Expand Up @@ -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";
}
Expand Down Expand Up @@ -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){
Expand All @@ -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();
}
});
});
});
Expand Down Expand Up @@ -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;
4 changes: 1 addition & 3 deletions questionsService/question-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
6 changes: 5 additions & 1 deletion questionsService/questionGeneration.js
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
}
}

Expand Down
26 changes: 18 additions & 8 deletions webapp/src/components/QuestionArea.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
};
Expand All @@ -27,16 +34,17 @@ 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",
"respuestasIncorrecta1": "London",
"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(
Expand All @@ -48,7 +56,9 @@ export function QuestionArea(){
<AnswersBlock respuestas={respuestas}/> {/* Renderizar las respuestas de la pregunta */}
</>
) : (
<p>Cargando...</p> // Mensaje de carga mientras se obtienen los datos
<>
<p>Cargando...</p> {/* Mensaje de carga mientras se obtienen los datos */}
</>
)}
</Box>
)
Expand Down

0 comments on commit 6e0a01f

Please sign in to comment.