diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index de82312..462b04f 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -65,6 +65,7 @@ app.get('/getquestions', async(req,res)=> { } }); +//Guardar el historial app.post('/savehistory', async (req, res) => { try{ const historyResponse = await axios.post(historyServiceUrl+'/savehistory', req.body); @@ -74,6 +75,19 @@ app.post('/savehistory', async (req, res) => { } }); +//Obtener el historial +app.get('/gethistory', async (req, res) => { + try{ + const historyResponse = await axios.get(historyServiceUrl+'/gethistory', { + params: { username: req.query.username } + }); + res.json(historyResponse.data); + }catch(error){ + res.status(error.response.status).json({ error: error.response.data.error }); + } +}); + + // Read the OpenAPI YAML file synchronously openapiPath='./openapi.yaml' if (fs.existsSync(openapiPath)) { diff --git a/users/historyservice/history-service.js b/users/historyservice/history-service.js index a0bbef8..46bb87f 100644 --- a/users/historyservice/history-service.js +++ b/users/historyservice/history-service.js @@ -17,7 +17,7 @@ mongoose.connect(mongoUri); app.post('/savehistory', async (req, res) => { try { - let username = req.body.username;//necesitamos el username + let username = req.body.username; //necesitamos el username //Extraer los datos de la solicitud const { NumPreguntasJugadas, NumAcertadas } = req.body; @@ -53,6 +53,38 @@ app.post('/savehistory', async (req, res) => { } }); +app.get('/gethistory', async (req, res) => { + try { + + let username = req.query.username; + + console.log(username); + // Buscar el historial en la base de datos basado en el nombre de usuario + let historyEntry = await History.findOne({ username: username }); + + if (historyEntry === null) { + + // Si no se encuentra ningún historial para el usuario, crear un nuevo historial con valores igualados a 0 + historyEntry = new History({ + username: username, + NumJugadas: 0, + NumPreguntasJugadas: 0, + NumAcertadas: 0, + NumFalladas: 0 + }) + + // Guardar el nuevo historial en la base de datos + await historyEntry.save(); + + } + + res.json(historyEntry); + + } catch (error) { + res.status(500).json({ error: 'Error al obtener el historial' }); + } +}); + const server = app.listen(port, () => { console.log(`History Service listening at http://localhost:${port}`); }); diff --git a/webapp/src/components/pages/Historial.js b/webapp/src/components/pages/Historial.js index e06ab87..698be5a 100644 --- a/webapp/src/components/pages/Historial.js +++ b/webapp/src/components/pages/Historial.js @@ -1,4 +1,5 @@ -import React, { useContext, useEffect } from 'react'; +import React, {useCallback, useContext, useEffect, useState} from 'react'; +import axios from 'axios'; import { useNavigate } from 'react-router-dom'; import { AuthContext } from '../../AuthContext'; import '../../App.css'; @@ -6,33 +7,47 @@ import './Historial.css'; export default function Historial() { const navigate = useNavigate(); - const { isLoggedIn } = useContext(AuthContext); + const { isLoggedIn, username } = useContext(AuthContext); + const [historialData, setHistorialData] = useState(false); + + const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; + + const fetchHistorialData = useCallback(async () => { + try { + let response = await axios.get(`${apiEndpoint}/gethistory`, { + params: { username: username } + }); + + console.log(response.data); + + setHistorialData(response.data); + + } catch (error) { + console.error('Error al obtener el historial:', error); + } + }, [apiEndpoint, username]); + useEffect(() => { if (!isLoggedIn) { navigate('/login'); + } else { + fetchHistorialData(); } - }, [isLoggedIn, navigate]); - - // Datos de ejemplo - const example_data = { - username: 'nombre', - NumJugadas: '20', - NumPreguntasJugadas: '100', - NumAcertadas: '80', - NumFalladas: '20', - }; + }, [isLoggedIn, navigate, fetchHistorialData]); return (

HISTORIAL

-
-

{example_data.username}

-

Número de Partidas: {example_data.NumJugadas}

-

Número de Preguntas Jugadas: {example_data.NumPreguntasJugadas}

-

Número de acertadas: {example_data.NumAcertadas}

-

Número de falladas: {example_data.NumFalladas}

-
+ {historialData && ( +
+

Nombre de usuario: {historialData.username}

+

Número de Partidas: {historialData.NumJugadas}

+

Número de Preguntas Jugadas: {historialData.NumPreguntasJugadas}

+

Número de acertadas: {historialData.NumAcertadas}

+

Número de falladas: {historialData.NumFalladas}

+
+ )}
); } diff --git a/webapp/src/components/pages/Jugar.js b/webapp/src/components/pages/Jugar.js index dd6310e..b96b174 100644 --- a/webapp/src/components/pages/Jugar.js +++ b/webapp/src/components/pages/Jugar.js @@ -54,7 +54,7 @@ function Jugar() { } else { getQuestions(); } - }, [isLoggedIn, navigate]); // Asegúrate de incluir apiEndpoint en las dependencias si su valor puede cambiar. + }, [isLoggedIn, navigate]); const handleNextQuestion = useCallback((timeExpired = false) => {