Skip to content

Commit

Permalink
Added easterEgg to the question generator service...
Browse files Browse the repository at this point in the history
  • Loading branch information
AbelMH1 committed May 2, 2024
1 parent e269505 commit ad9f00d
Showing 1 changed file with 28 additions and 15 deletions.
43 changes: 28 additions & 15 deletions questionsservice/questiongeneratorservice/questiongenerator.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class QuestionGenerator {
generateMethod: (plantilla, respuestas) => this.generateQuestionNonDuplicatedAnswers(plantilla, respuestas),
pregunta: (param) => `¿En qué continente se situa ${param}?`,
filtro: { pais: { $exists: true }, continente: { $exists: true } },
filtro_decoys: (answer) => { return { pais: { $exists: true }, continente: { $exists: true, $ne: answer.continente} }},
filtro_decoys: (answer) => { return { pais: { $exists: true }, continente: { $exists: true, $ne: answer.continente } } },
campo_pregunta: 'pais',
campo_respuesta: 'continente'
},
Expand All @@ -45,7 +45,7 @@ class QuestionGenerator {
generateMethod: (plantilla, respuestas) => this.generateQuestionNonDuplicatedAnswers(plantilla, respuestas),
pregunta: (param) => `¿Cual de los siguientes paises se situa en ${param}?`,
filtro: { pais: { $exists: true }, continente: { $exists: true } },
filtro_decoys: (answer) => { return { pais: { $exists: true }, continente: { $exists: true, $ne: answer.continente} }},
filtro_decoys: (answer) => { return { pais: { $exists: true }, continente: { $exists: true, $ne: answer.continente } } },
campo_pregunta: 'continente',
campo_respuesta: 'pais'
},
Expand All @@ -54,7 +54,7 @@ class QuestionGenerator {
generateMethod: (plantilla, respuestas) => this.generateQuestionNonDuplicatedAnswers(plantilla, respuestas),
pregunta: (param) => `¿En qué país se situa la atracción turística "${param}"?`,
filtro: { pais: { $exists: true }, monumento: { $exists: true } },
filtro_decoys: (answer) => { return { monumento: { $exists: true }, pais: { $exists: true, $ne: answer.pais} }},
filtro_decoys: (answer) => { return { monumento: { $exists: true }, pais: { $exists: true, $ne: answer.pais } } },
campo_pregunta: 'monumento',
campo_respuesta: 'pais'
},
Expand All @@ -63,7 +63,7 @@ class QuestionGenerator {
generateMethod: (plantilla, respuestas) => this.generateQuestionNonDuplicatedAnswers(plantilla, respuestas),
pregunta: (param) => `¿Cuál de las siguientes atraccioones turísticas se encuentra en ${param}?`,
filtro: { pais: { $exists: true }, monumento: { $exists: true } },
filtro_decoys: (answer) => { return { monumento: { $exists: true }, pais: { $exists: true, $ne: answer.pais} }},
filtro_decoys: (answer) => { return { monumento: { $exists: true }, pais: { $exists: true, $ne: answer.pais } } },
campo_pregunta: 'pais',
campo_respuesta: 'monumento'
},
Expand All @@ -88,7 +88,7 @@ class QuestionGenerator {
generateMethod: (plantilla, respuestas) => this.generateQuestionNonDuplicatedAnswers(plantilla, respuestas),
pregunta: (param) => `¿Quién fue el director de la película "${param}"?`,
filtro: { pelicula: { $exists: true }, director: { $exists: true } },
filtro_decoys: (answer) => { return { pelicula: { $exists: true }, director: { $exists: true, $ne: answer.director} }},
filtro_decoys: (answer) => { return { pelicula: { $exists: true }, director: { $exists: true, $ne: answer.director } } },
campo_pregunta: 'pelicula',
campo_respuesta: 'director'
},
Expand All @@ -97,7 +97,7 @@ class QuestionGenerator {
generateMethod: (plantilla, respuestas) => this.generateQuestionNonDuplicatedAnswers(plantilla, respuestas),
pregunta: (param) => `¿Cuál de estas películas ha sido dirigida por "${param}"?`,
filtro: { pelicula: { $exists: true }, director: { $exists: true } },
filtro_decoys: (answer) => { return { pelicula: { $exists: true }, director: { $exists: true, $ne: answer.director} }},
filtro_decoys: (answer) => { return { pelicula: { $exists: true }, director: { $exists: true, $ne: answer.director } } },
campo_pregunta: 'director',
campo_respuesta: 'pelicula'
},
Expand All @@ -106,7 +106,7 @@ class QuestionGenerator {
generateMethod: (plantilla, respuestas) => this.generateQuestionNonDuplicatedAnswers(plantilla, respuestas),
pregunta: (param) => `¿Quién canta la canción "${param}"?`,
filtro: { cancion: { $exists: true }, artista: { $exists: true } },
filtro_decoys: (answer) => { return { cancion: { $exists: true }, artista: { $exists: true, $ne: answer.artista} }},
filtro_decoys: (answer) => { return { cancion: { $exists: true }, artista: { $exists: true, $ne: answer.artista } } },
campo_pregunta: 'cancion',
campo_respuesta: 'artista'
},
Expand All @@ -115,7 +115,7 @@ class QuestionGenerator {
generateMethod: (plantilla, respuestas) => this.generateQuestionNonDuplicatedAnswers(plantilla, respuestas),
pregunta: (param) => `¿Cuál de las siguientes canciones es interpretada por "${param}"?`,
filtro: { cancion: { $exists: true }, artista: { $exists: true } },
filtro_decoys: (answer) => { return { cancion: { $exists: true }, artista: { $exists: true, $ne: answer.artista} }},
filtro_decoys: (answer) => { return { cancion: { $exists: true }, artista: { $exists: true, $ne: answer.artista } } },
campo_pregunta: 'artista',
campo_respuesta: 'cancion'
}
Expand All @@ -136,8 +136,8 @@ class QuestionGenerator {
// }
];

static getAvailableTopics(){
return [ ...this.temas.keys() ];
static getAvailableTopics() {
return [...this.temas.keys()];
}


Expand All @@ -151,21 +151,21 @@ class QuestionGenerator {
throw new Error(`Not enought data found to generate a question`);
}
let randomDecoys = [];
if (respuestas > 1){
if (respuestas > 1) {
randomDecoys = await plantilla.modelo.aggregate([
{ $match: plantilla.filtro_decoys(randomAnswer[0]) },
{ $sample: { size: respuestas-1 } }
{ $sample: { size: respuestas - 1 } }
]);
}
if (randomDecoys.length < respuestas-1) {
if (randomDecoys.length < respuestas - 1) {
console.error(`Not enought data found to generate a question`);
throw new Error(`Not enought data found to generate a question`);
}

const retQuestion = {
pregunta: plantilla.pregunta(randomAnswer[0][plantilla.campo_pregunta]),
respuesta_correcta: randomAnswer[0][plantilla.campo_respuesta],
respuestas_incorrectas: Array.from({ length: respuestas-1 }, (_, i) => randomDecoys[i][plantilla.campo_respuesta])
respuestas_incorrectas: Array.from({ length: respuestas - 1 }, (_, i) => randomDecoys[i][plantilla.campo_respuesta])
};
return retQuestion;
}
Expand All @@ -183,7 +183,7 @@ class QuestionGenerator {
const retQuestion = {
pregunta: plantilla.pregunta(randomDocs[0][plantilla.campo_pregunta]),
respuesta_correcta: randomDocs[0][plantilla.campo_respuesta],
respuestas_incorrectas: Array.from({ length: respuestas-1 }, (_, i) => randomDocs[i+1][plantilla.campo_respuesta])
respuestas_incorrectas: Array.from({ length: respuestas - 1 }, (_, i) => randomDocs[i + 1][plantilla.campo_respuesta])
};
return retQuestion;
}
Expand All @@ -196,6 +196,7 @@ class QuestionGenerator {
let plantilla = this.plantillas[plantillasDisponibles[index]];
retQuestions.push(await plantilla.generateMethod(plantilla, respuestas));
}
this.easterEgg(plantillasDisponibles, retQuestions);
console.log("\nPreguntas generadas:");
console.log(retQuestions);
return retQuestions;
Expand Down Expand Up @@ -228,6 +229,18 @@ class QuestionGenerator {
return [...new Set(templates)];
}

static easterEgg(plantillasDisponibles, retQuestions) {
if (plantillasDisponibles.includes(10)){
for(let question of retQuestions) {
if (question.pregunta.includes('Quién canta la canción')) {
question.pregunta = '¿Quién es el famoso batería del grupo Kactus Jack?';
question.respuesta_correcta = 'Jose Emilio Labra Gayo';
return;
}
}
}
}

}

module.exports = {
Expand Down

0 comments on commit ad9f00d

Please sign in to comment.