Skip to content

Commit

Permalink
se obtiene una pregunta diaria cada 24 horas y añadido el obtener la …
Browse files Browse the repository at this point in the history
…pregunta diaria de la bd para la fecha de ese mismo dia
  • Loading branch information
uo282189 committed Apr 6, 2024
1 parent 1ae9c94 commit 7470203
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 4 deletions.
1 change: 0 additions & 1 deletion gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ app.get('/getQuestionModoBasico', async (req, res) => {
try {
// Obtener el idioma en el que esta la app
const idioma = req.query.idioma;
console.log("Idioma: " + idioma);
// llamamos al servicio de preguntas
const questionResponse = await axios.get(`${questionServiceUrl}/getQuestionModoBasico?idioma=${idioma}`, req.body);
res.json(questionResponse.data);
Expand Down
96 changes: 96 additions & 0 deletions questionservice/obtenerPreguntasBaseDatos.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,102 @@ class ObtenerPreguntas{
throw new Error("Error al obtener las preguntas de la base de datos");
}
}

async obtenerPreguntaDiaria(idioma){
try{
console.log("entra en obtener pregunta diaria");
const fecha = new Date(); // Obtenemos la fecha actual
// como nos da tambien la hora y no queremos eso, la eliminamos
const año = fecha.getFullYear();
const mes = fecha.getMonth() + 1;
const dia = fecha.getDate();
// Formateamos la fecha como lo tenemos en la bd
const fechaSinHora = `${año}-${mes < 10 ? '0' : ''}${mes}-${dia < 10 ? '0' : ''}${dia}`;

console.log("Fecha sin hora: " + fechaSinHora);
console.log(typeof(fechaSinHora));

var pregunta = await Pregunta.findOne({ diaria: fechaSinHora });
var resultado;

if(pregunta != null){
try{
var tipo = await Tipos.findOne({ idPreguntas: { $in: pregunta._id } });

var respuestas;

if(idioma == "es"){
respuestas = await Respuesta.aggregate([
{ $match: { tipos: {$in : [tipo._id]}, textoRespuesta_es: { $ne: [pregunta.respuestaCorrecta_es, "Ninguna de las anteriores" ]} } },
{ $sample: { size: 3 } }
]);
}
else{
respuestas = await Respuesta.aggregate([
{ $match: { tipos: {$in : [tipo._id]}, textoRespuesta_en: { $ne: [pregunta.respuestaCorrecta_en, "Ninguna de las anteriores" ]} } },
{ $sample: { size: 3 } }
]);
}

//comprobamos si hay respuestas
if(respuestas.length < 3){
throw new Error("No hay suficientes respuestas en la base de datos");
}

if(idioma == "es"){
resultado = {
pregunta: pregunta.textoPregunta_es,
correcta: pregunta.respuestaCorrecta_es,
respuestasIncorrecta1: respuestas[0].textoRespuesta_es,
respuestasIncorrecta2: respuestas[1].textoRespuesta_es,
respuestasIncorrecta3: respuestas[2].textoRespuesta_es
};
}

else{
resultado = {
pregunta: pregunta.textoPregunta_en,
correcta: pregunta.respuestaCorrecta_en,
respuestasIncorrecta1: respuestas[0].textoRespuesta_en,
respuestasIncorrecta2: respuestas[1].textoRespuesta_en,
respuestasIncorrecta3: respuestas[2].textoRespuesta_en
};
}
}
catch(error){
throw new Error("Error al obtener el tipo o las respuestas de la base de datos");
}
}
else{
throw new Error("No se ha encontrado ninguna pregunta diaria en la base de datos");
}

return resultado;

} catch (error) {
throw new Error("Error al obtener la pregunta diaria en la base de datos: " + error.message);
}
}

async generarPreguntaDiaria(fecha){
try{
console.log("Fecha: " + fecha);

var pregunta = await Pregunta.findOneAndUpdate(
{ diaria: null }, // Filtro para encontrar una pregunta con 'diaria' igual a null
{ $set: { diaria: fecha } }, // Establecer el valor de 'diaria' a la fecha proporcionada
{ new: true, upsert: true, strict: false } // Para devolver el documento actualizado y permitir campos no definidos en el esquema
);
if (pregunta) {
console.log("Pregunta sin atributo 'diaria' encontrada y actualizada:", pregunta);
console.log("Pregunta con atributo 'diaria' guardada en la base de datos.");
} else {
console.log("No se encontraron preguntas sin el atributo 'diaria'.");
}
} catch (error) {
throw new Error("Error al obtener y actualizar la pregunta diaria en la base de datos: " + error.message);
}
}
}

module.exports = ObtenerPreguntas;
4 changes: 1 addition & 3 deletions questionservice/question-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ app.get('/getQuestionDiaria', async(req,res)=> {
try{
const idioma = req.query.idioma;
//coger pregunta bd
const questions = await question.obtenerPregunta(1);
const questions = await question.obtenerPreguntaDiaria(idioma);
//para devolver la pregunta
res.json(questions);

Expand All @@ -60,9 +60,7 @@ app.get('/getQuestionDiaria', async(req,res)=> {

app.get('/getQuestionModoBasico', async(req,res)=> {
try{
console.log("idioma del question service",req.query.idioma);
const idioma = req.query.idioma;
console.log("idioma del question service",idioma);
//coger pregunta bd
const questions = await question.obtenerPregunta(10, idioma);
//para devolver la pregunta
Expand Down
32 changes: 32 additions & 0 deletions questionservice/scheduler.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ const cron = require('node-cron');
const QuestionGenerator = require('./questionGeneration');
const questionGenerator = new QuestionGenerator();

const ObtenerPreguntaDiaria = require('./obtenerPreguntasBaseDatos');
const obtenerPreguntaDiaria = new ObtenerPreguntaDiaria();


class Scheduler {

Expand All @@ -19,6 +22,23 @@ class Scheduler {
}
}

async generarPreguntaDiaria() {
try {
const fecha = new Date(); // Obtenemos la fecha actual
// como nos da tambien la hora y no queremos eso, la eliminamos
const año = fecha.getFullYear();
const mes = fecha.getMonth() + 1;
const dia = fecha.getDate();
// Formateamos la fecha para que sea compatible con la base de datos
const fechaSinHora = `${año}-${mes < 10 ? '0' : ''}${mes}-${dia < 10 ? '0' : ''}${dia}`;

await obtenerPreguntaDiaria.generarPreguntaDiaria(fechaSinHora); //Generamos la pregunta diaria
} catch (error) {
console.error(error);
}
}


start() {
cron.schedule('*/30 * * * *', async () => {
try {
Expand All @@ -28,6 +48,18 @@ class Scheduler {
console.error('Fallo al generar la pregunta:', error);
}
});

//para generar la pregunta diaria

cron.schedule('0 0 */1 * *', async () => {
try {
await this.generarPreguntaDiaria();
}
catch (error) {
console.error('Fallo al generar la pregunta diaria:', error);
}
});

}
}

Expand Down

0 comments on commit 7470203

Please sign in to comment.