From 6742afb5172f38033d9d6096e6a2273d5e57cf46 Mon Sep 17 00:00:00 2001 From: iyanfdezz Date: Sat, 24 Feb 2024 16:19:57 +0100 Subject: [PATCH] Fixed user's database (currently not working) --- stats/model/stats-getter.js | 2 +- stats/stats-service.js | 30 +++++++++++++++ users/userservice/user-model.js | 6 ++- webapp/src/App.js | 16 ++------ webapp/src/pages/Clasico/Clasico.js | 59 ++++++++++++----------------- 5 files changed, 63 insertions(+), 50 deletions(-) diff --git a/stats/model/stats-getter.js b/stats/model/stats-getter.js index 239c44ec..073ba071 100644 --- a/stats/model/stats-getter.js +++ b/stats/model/stats-getter.js @@ -1,4 +1,4 @@ -const User = require('../../users/userservice/user-mode.js/User'); +const User = require('../../users/userservice/user-model.js/User'); class StatsForUser { diff --git a/stats/stats-service.js b/stats/stats-service.js index 46d8a591..0edf7fc1 100644 --- a/stats/stats-service.js +++ b/stats/stats-service.js @@ -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; @@ -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 diff --git a/users/userservice/user-model.js b/users/userservice/user-model.js index 99e3a111..3add662e 100644 --- a/users/userservice/user-model.js +++ b/users/userservice/user-model.js @@ -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 }], }); diff --git a/webapp/src/App.js b/webapp/src/App.js index ad9f4b21..b65ff3d2 100644 --- a/webapp/src/App.js +++ b/webapp/src/App.js @@ -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 ( {/** Rutas públicas */} - } /> + } /> - /**Rutas que estan protegidas si no estas registrado */ {/** Rutas privadas */} - {authenticated ? ( - <> - } /> - } /> - - ) : ( - - )} + } /> + } /> {/* Ruta por defecto */} } /> diff --git a/webapp/src/pages/Clasico/Clasico.js b/webapp/src/pages/Clasico/Clasico.js index e6b00ff0..e76b6b66 100644 --- a/webapp/src/pages/Clasico/Clasico.js +++ b/webapp/src/pages/Clasico/Clasico.js @@ -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); @@ -83,7 +84,7 @@ const JuegoPreguntas = () => { return {}; }; - const handleSiguientePregunta = () => { + const handleSiguientePregunta = async () => { if (respuestaSeleccionada === preguntaActual.respuestaCorrecta) { setPuntuacion(puntuacion + 1); setPreguntasCorrectas(preguntasCorrectas + 1); @@ -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