Skip to content

Commit

Permalink
Fixed user's database (currently not working)
Browse files Browse the repository at this point in the history
  • Loading branch information
iyanfdezz committed Feb 24, 2024
1 parent ef35c76 commit 6742afb
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 50 deletions.
2 changes: 1 addition & 1 deletion stats/model/stats-getter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const User = require('../../users/userservice/user-mode.js/User');
const User = require('../../users/userservice/user-model.js/User');

class StatsForUser {

Expand Down
30 changes: 30 additions & 0 deletions stats/stats-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
const express = require("express");
const bodyParser = require("body-parser");
const StatsForUser = require("./model/stats-getter");
const User = require("../users/user-model.js");

const app = express();
const port = 8004;
Expand All @@ -12,6 +13,35 @@ app.use(bodyParser.json());

app.set("json spaces", 40);

app.post("/saveGame", async (req, res) => {
try {
const { username, correctAnswers, incorrectAnswers, points, avgTime } = req.body;

// Encontrar al usuario en la base de datos
const user = await User.findOne({ username });

if (!user) {
return res.status(404).json({ error: "Usuario no encontrado" });
}

// Crear un nuevo juego
const newGame = {
correctAnswers,
incorrectAnswers,
points,
avgTime
};

user.games.push(newGame);

await user.save();

res.json({ message: "Juego guardado exitosamente" });
} catch (error) {
res.status(400).json({ error: error.message });
}
});

app.get("/stats", async (req, res) => {
if (!statsGetter.existsUser(req.query.user)) {
res
Expand Down
6 changes: 4 additions & 2 deletions users/userservice/user-model.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ const userSchema = new mongoose.Schema({
default: Date.now,
},
games: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Game'
correctAnswers: Number,
incorrectAnswers: Number,
points: Number,
avgTime: Number
}],
});

Expand Down
16 changes: 4 additions & 12 deletions webapp/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,17 @@ import './App.css';
import {BrowserRouter, Routes, Route, Navigate} from "react-router-dom";

//Autentificamos que el usuario este registrado en la aplicación
const [authenticated, setAuthenticated] = useState(false);

//const [authenticated, setAuthenticated] = useState(false);
function App() {
return (
<BrowserRouter>
<Routes>
{/** Rutas públicas */}
<Route path='/' element={<Authenticate setAuthenticated={setAuthenticated} />} />
<Route path='/' element={<Authenticate />} />

/**Rutas que estan protegidas si no estas registrado */
{/** Rutas privadas */}
{authenticated ? (
<>
<Route path='/home' element={<Home />} />
<Route path='/home/clasico' element={<Clasico />} />
</>
) : (
<Navigate to="/" />
)}
<Route path='/home' element={<Home />} />
<Route path='/home/clasico' element={<Clasico />} />

{/* Ruta por defecto */}
<Route path='*' element={<WrongRoute />} />
Expand Down
59 changes: 24 additions & 35 deletions webapp/src/pages/Clasico/Clasico.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { Link } from 'react-router-dom';
import Footer from "../../components/Footer/Footer.js";
import axios from 'axios';


const JuegoPreguntas = () => {
const [isLoading, setIsLoading] = useState(true);
const [indicePregunta, setIndicePregunta] = useState(0);
Expand Down Expand Up @@ -83,7 +84,7 @@ const JuegoPreguntas = () => {
return {};
};

const handleSiguientePregunta = () => {
const handleSiguientePregunta = async () => {
if (respuestaSeleccionada === preguntaActual.respuestaCorrecta) {
setPuntuacion(puntuacion + 1);
setPreguntasCorrectas(preguntasCorrectas + 1);
Expand All @@ -100,56 +101,44 @@ const JuegoPreguntas = () => {
setIndicePregunta(indicePregunta + 1);
setPreguntaActual(preguntas[indicePregunta]);
} else {
//TODO: Introducir puntos, preguntas correctas, tiempo y preguntas falladas en la BD

if (preguntasCorrectas + preguntasFalladas > 0) {
setTiempoMedio(tiempoTotal/(preguntasCorrectas+preguntasFalladas));
}

//Now we store the game in the user's DB
const username = sessionStorage.getItem('username');

const newGame = new Game({
const newGame = {
correctAnswers: preguntasCorrectas,
incorrectAnswers: preguntasFalladas,
points: puntuacion,
avgTime: tiempoMedio,
};

try {
const response = await fetch('http://localhost:8004/saveGame', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
username,
game: newGame,
}),
});

//SAVING THE GAME ON THE USERS DATABASE

// Encontrar el usuario en la base de datos
User.findOne({ username }, (err, user) => {
if (err) {
console.error('Error al encontrar el usuario:', err);
// TODO : hacer la UI para el manejo de errores
} else {

newGame.save((err, game) => {

if (err) {

console.error('Error al guardar el juego:', err);
// TODO : hacer la UI para el manejo de errores
}
else {

user.games.push(game._id);

user.save((err) => {
if (err) {
console.error('Error al guardar el usuario actualizado:', err);
// TODO : hacer la UI para el manejo de errores
}
});
}
});

if (!response.ok) {
throw new Error('Error al guardar el juego');
}
});

// Si la respuesta es exitosa, marcar el juego como terminado
setJuegoTerminado(true);
} catch (error) {
console.error('Error al guardar el juego:', error);
// Manejar el error, por ejemplo, mostrando un mensaje al usuario
}
};
}
};

const handleRepetirJuego = () => {
// Reiniciar el estado para repetir el juego
Expand Down

0 comments on commit 6742afb

Please sign in to comment.