Skip to content

Commit

Permalink
Arreglar el guardado de la pregunta obtenida de wikidata a la base de…
Browse files Browse the repository at this point in the history
… datos
  • Loading branch information
uo282189 committed Mar 7, 2024
1 parent 00cfe08 commit 2851bd6
Show file tree
Hide file tree
Showing 6 changed files with 252 additions and 205 deletions.
155 changes: 86 additions & 69 deletions questionsService/guardarPreguntaBaseDatos.js
Original file line number Diff line number Diff line change
@@ -1,77 +1,96 @@
const mongoose = require('mongoose');
const Categoria = mongoose.model('Categoria');
const Pregunta = mongoose.model('Pregunta');
const Tipos = mongoose.model('Tipos');
const Respuesta = mongoose.model('Respuesta');

class GuardarBaseDatos{

constructor(finalQuestion, choice, category){
this.finalQuestion = finalQuestion;
this.choice = choice;
this.category = category;
constructor(){
this.finalQuestion;
}

guardarEnBaseDatos(){
console.log("Guardando pregunta en la base de datos");
guardarEnBaseDatos(finalQuestion){
this.finalQuestion = finalQuestion;
//primero deberiamos de guardar la categoria
this.guardarCategoria();
this.guardarCategoria().then(idCategoria => {
// Guardamos el tipo de pregunta
return this.guardarPreguntaTipo(idCategoria);
}).then(idTipo => {
// Guardamos las respuestas incorrectas
this.guardarPrimeraIncorrecta(idTipo);
this.guardarSegundaIncorrecta(idTipo);
this.guardarTerceraIncorrecta(idTipo);
}).catch(error => {
console.error("Error al guardar la categoría o el tipo de pregunta:", error);
});
}

guardarCategoria(){
console.log("Guardando categoria");
var idCategoria;

Categoria.findOne({ textoPregunta: this.finalQuestion.category })
.then(categoriaExistente => {
if (!categoriaExistente) {
// Si no existe ya esa categoria la crea
var nuevaCategoria = new Categoria({
nombre: this.category,
});

//Guardamos la nueva pregunta
nuevaCategoria.save().then(categoriaGuardada => {
//guardamos el id de la categoria nueva
idCategoria = categoriaGuardada._id;
});
}

else{
//guardamos el id de la categoria existente
idCategoria = categoriaExistente._id;
}
});

this.guardarPreguntaTipo(idCategoria);
return new Promise((resolve, reject) => {
var idCategoria;

Categoria.findOne({ nombre: this.finalQuestion.category })
.then(categoriaExistente => {
if (!categoriaExistente) {
// Si no existe ya esa categoria la crea
var nuevaCategoria = new Categoria({
nombre: this.finalQuestion.category,
});

//Guardamos la nueva pregunta
nuevaCategoria.save().then(categoriaGuardada => {
//guardamos el id de la categoria nueva
idCategoria = categoriaGuardada._id;
resolve(idCategoria);
});
}

else{
//guardamos el id de la categoria existente
idCategoria = categoriaExistente._id;
resolve(idCategoria);
}
});
}) .catch(error => {
console.error("Error al ejecutar la consulta:", error);
reject(error); // Rechazamos la Promesa con el error
});
}

guardarPreguntaTipo(idCategoria){
console.log("Guardando pregunta y tipo");
var idTipo;
// Comprobar si la pregunta ya existe
Pregunta.findOne({ textoPregunta: this.finalQuestion.question })
.then(preguntaExistente => {
if (!preguntaExistente) {
// Si no existe la pregunta, se crea
var nuevaPregunta = new Pregunta({
textoPregunta: this.finalQuestion.question,
respuestaCorrecta: this.finalQuestion.correct,
categoria: idCategoria
});

// Guardar la nueva pregunta
nuevaPregunta.save()
.then(preguntaGuardada => {

// Comprobar si existe el tipo de la pregunta y asociarlo
Tipos.findOne({ nombreTipo: this.choice })
.then(tipoExistente => {
if (!tipoExistente) {
// Si no existe el tipo, se crea
var nuevoTipo = new Tipos({
idPreguntas: [preguntaGuardada._id],
nombreTipo: this.choice
});

return new Promise((resolve, reject) => {
var idTipo;
// Comprobar si la pregunta ya existe
Pregunta.findOne({ textoPregunta: this.finalQuestion.question })
.then(preguntaExistente => {
if (!preguntaExistente) {
// Si no existe la pregunta, se crea
var nuevaPregunta = new Pregunta({
textoPregunta: this.finalQuestion.question,
respuestaCorrecta: this.finalQuestion.correct,
categoria: idCategoria
});
// Guardar la nueva pregunta
nuevaPregunta.save()
.then(preguntaGuardada => {
// Comprobar si existe el tipo de la pregunta y asociarlo
Tipos.findOne({ nombreTipo: this.finalQuestion.type })
.then(tipoExistente => {
if (!tipoExistente) {
// Si no existe el tipo, se crea
var nuevoTipo = new Tipos({
idPreguntas: [preguntaGuardada._id],
nombreTipo: this.finalQuestion.type
});
// Guardar el nuevo tipo
nuevoTipo.save().then(tipoGuardado => {
//guardamos el id del tipo
idTipo = tipoGuardado._id;
resolve(idTipo);
});
}
else {
Expand All @@ -81,27 +100,27 @@ class GuardarBaseDatos{
tipoExistente.save().then(tipoGuardado => {
//guardamos el id del tipo
idTipo = tipoGuardado._id;
resolve(idTipo);
});
}
});
});
}
}).catch(error => {
console.error("Error al ejecutar la consulta:", error);
reject(error); // Rechazamos la Promesa con el error
});
});

this.guardarPrimeraIncorrecta(idTipo);
this.guardarSegundaIncorrecta(idTipo);
this.guardarTerceraIncorrecta(idTipo);
}

guardarPrimeraIncorrecta(idTipo){
console.log("Guardando primera incorrecta");
//comprobar si la primera respuesta existe ya en la base de datos
Respuesta.findOne({ textoRespuesta: this.finalQuestion.incorrect1 })
.then(respuestaExistente => {
if (!respuestaExistente) {
// Si no existe ya esa pregunta la crea
var nuevaRespuesta = new Respuesta({
textoRespuesta: this.finalQuestion.question,
textoRespuesta: this.finalQuestion.incorrect1,
tipos: [idTipo]
});

Expand All @@ -121,14 +140,13 @@ class GuardarBaseDatos{
}

guardarSegundaIncorrecta(idTipo){
console.log("Guardando segunda incorrecta");
//comprobar si la segunda respuesta existe ya en la base de datos
Respuesta.findOne({ textoRespuesta: this.finalQuestion.incorrect2 })
.then(respuestaExistente => {
if (!respuestaExistente) {
// Si no existe ya esa pregunta la crea
var nuevaRespuesta = new Respuesta({
textoRespuesta: this.finalQuestion.question,
textoRespuesta: this.finalQuestion.incorrect2,
tipos: [idTipo]
});

Expand All @@ -148,14 +166,13 @@ class GuardarBaseDatos{
}

guardarTerceraIncorrecta(idTipo){
console.log("Guardando tercera incorrecta");
//comprobar si la tercera respuesta existe ya en la base de datos
Respuesta.findOne({ textoRespuesta: this.finalQuestion.incorrect3 })
.then(respuestaExistente => {
if (!respuestaExistente) {
// Si no existe ya esa pregunta la crea
var nuevaRespuesta = new Respuesta({
textoRespuesta: this.finalQuestion.question,
textoRespuesta: this.finalQuestion.incorrect3,
tipos: [idTipo]
});

Expand Down
38 changes: 26 additions & 12 deletions questionsService/obtenerPreguntasBaseDatos.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,30 @@
const mongoose = require('mongoose');

const Categoria = mongoose.model('Categoria');
const Pregunta = mongoose.model('Pregunta');
const Tipos = mongoose.model('Tipos');
const Respuesta = mongoose.model('Respuesta');

class ObtenerPreguntas{

obtenerPregunta(){
var pregunta;
var respuestaCorrecta;
var respuestaIncorrecta1;
var respuestaIncorrecta2;
var respuestaIncorrecta3;
obtenerPregunta(){
console.log("Obteniendo pregunta");
var pregunta;
var respuestaCorrecta;
var respuestaIncorrecta1;
var respuestaIncorrecta2;
var respuestaIncorrecta3;

Pregunta.aggregate([
Pregunta.aggregate([
{ $sample: { size: 1 } }
]).then(pregunta => {
var pregunta_id = pregunta._id;
pregunta = pregunta.textoPregunta;
Tipo.findOne({ _id: { $in: pregunta.pregunta_id } }).then(tipo => {
console.log(tipo_id);
respuestaCorrecta = pregunta.respuestaCorrecta;
console.log(respuestaCorrecta);
Respuesta.aggregate([
Tipos.findOne({ _id: { $in: pregunta.pregunta_id } }).then(tipo => {
console.log(tipo_id);
respuestaCorrecta = pregunta.respuestaCorrecta;
console.log(respuestaCorrecta);
Respuesta.aggregate([
{ $match: { nombreTipo: tipo._id, texto: { $ne: [respuestaCorrecta, "Ninguna de las anteriores" ]} } },
{ $sample: { size: 3 } }

Expand All @@ -35,6 +43,12 @@ class ObtenerPreguntas{
console.error(err);
});

console.log(pregunta);
console.log(respuestaCorrecta);
console.log(respuestaIncorrecta1);
console.log(respuestaIncorrecta2);
console.log(respuestaIncorrecta3);

return resultado = {
pregunta: pregunta.textoPregunta,
correcta: respuestaCorrecta,
Expand Down
Loading

0 comments on commit 2851bd6

Please sign in to comment.