Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorporación arreglos #64

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,19 @@ services:
environment:
MONGODB_URI: mongodb://mongodb:27017/userdb

questionservice:
container_name: questionservice-${teamname:-defaultASW}
profiles: ["dev", "prod"]
build: ./questionsService/
depends_on:
- mongodb
ports:
- "8003:8003"
networks:
- mynetwork
environment:
MONGODB_URI: mongodb://mongodb:27017/questionsdb

gatewayservice:
container_name: gatewayservice-${teamname:-defaultASW}
image: ghcr.io/arquisoft/wiq_es05c/gatewayservice:latest
Expand All @@ -48,13 +61,15 @@ services:
- mongodb
- userservice
- authservice
- questionservice
ports:
- "8000:8000"
networks:
- mynetwork
environment:
AUTH_SERVICE_URL: http://authservice:8002
USER_SERVICE_URL: http://userservice:8001
QUESTION_SERVICE_URL: http://questionservice:8003

webapp:
container_name: webapp-${teamname:-defaultASW}
Expand Down
23 changes: 23 additions & 0 deletions gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const port = 8000;

const authServiceUrl = process.env.AUTH_SERVICE_URL || 'http://localhost:8002';
const userServiceUrl = process.env.USER_SERVICE_URL || 'http://localhost:8001';
const questionServiceUrl = process.env.QUESTION_SERVICE_URL || 'http://localhost:8003';

app.use(cors());
app.use(express.json());
Expand Down Expand Up @@ -41,6 +42,28 @@ app.post('/adduser', async (req, res) => {
}
});

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 });
}
});

app.get('/generateQuestions', async (req, res) => {
try {
// llamamos al servicio de preguntas
await axios.get(questionServiceUrl+'/generateQuestions', req.body);

} catch (error) {
res.status(error.response.status).json({ error: error.response.data.error });
}
});



// Start the gateway service
const server = app.listen(port, () => {
console.log(`Gateway Service listening at http://localhost:${port}`);
Expand Down
6 changes: 3 additions & 3 deletions gatewayservice/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
},
"repository": {
"type": "git",
"url": "git+https://github.com/arquisoft/wiq_0.git"
"url": "git+https://github.com/arquisoft/wiq_es05c.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/arquisoft/wiq_0/issues"
"url": "https://github.com/arquisoft/wiq_es05c/issues"
},
"homepage": "https://github.com/arquisoft/wiq_0#readme",
"homepage": "https://github.com/arquisoft/wiq_es05c#readme",
"dependencies": {
"axios": "^1.6.5",
"cors": "^2.8.5",
Expand Down
20 changes: 20 additions & 0 deletions questionsService/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Use an official Node.js runtime as a parent image
FROM node:20

# Set the working directory in the container
WORKDIR /usr/src/questionsService

# Copy package.json and package-lock.json to the working directory
COPY package*.json ./

# Install app dependencies
RUN npm install

# Copy the app source code to the working directory
COPY . .

# Expose the port the app runs on
EXPOSE 8003

# Define the command to run your app
CMD ["node", "question-service.js"]
160 changes: 87 additions & 73 deletions questionsService/guardarPreguntaBaseDatos.js
Original file line number Diff line number Diff line change
@@ -1,83 +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(){
// Connect to MongoDB
const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/questionsdb';
mongoose.connect(mongoUri);

//primero deberiamos de guardar la categoria
this.guardarCategoria();

//cerramos la conexion
mongoose.connection.close();
}
guardarEnBaseDatos(finalQuestion){
this.finalQuestion = finalQuestion;
//primero deberiamos de guardar la categoria
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(){
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){
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 @@ -87,16 +100,17 @@ 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){
Expand All @@ -106,7 +120,7 @@ class GuardarBaseDatos{
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 @@ -125,14 +139,14 @@ class GuardarBaseDatos{
});
}

guardarSegundaIncorrecta(idTipo){
guardarSegundaIncorrecta(idTipo){
//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 @@ -158,7 +172,7 @@ class GuardarBaseDatos{
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
Loading