From e19ce7fbf6b6319cc9228fe0c9426c21d67c915a Mon Sep 17 00:00:00 2001 From: iyanfdezz Date: Thu, 25 Apr 2024 17:58:56 +0200 Subject: [PATCH 01/71] Cambiando el regex --- webapp/src/pages/Calculadora/Calculadora.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/src/pages/Calculadora/Calculadora.test.js b/webapp/src/pages/Calculadora/Calculadora.test.js index caec77e0..89f551e4 100644 --- a/webapp/src/pages/Calculadora/Calculadora.test.js +++ b/webapp/src/pages/Calculadora/Calculadora.test.js @@ -15,7 +15,7 @@ test("renders the game screen", () => { ); // Check if the game screen is rendered - expect(screen.getByText(/(\d+)\s*([-+*/])\s*(\d+)/i)).toBeInTheDocument(); + expect(screen.getByText(/\b\d+\s*[-+*/]\s*\d+\b/i)).toBeInTheDocument(); expect(screen.getByTitle(/number/i)).toBeInTheDocument(); expect(screen.getByRole("button", { name: /enviar/i })).toBeInTheDocument(); expect(screen.getByText(/tiempo restante/i)).toBeInTheDocument(); From cb53d747f4c8f74b080d086ffa0ff9c7018fc43a Mon Sep 17 00:00:00 2001 From: CANCI0 Date: Thu, 25 Apr 2024 18:20:18 +0200 Subject: [PATCH 02/71] =?UTF-8?q?M=C3=A1s=20errores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gatewayservice/gateway-service.js | 4 ++-- webapp/src/components/CustomModal/CustomModal.js | 3 +-- webapp/src/components/Profile/Profile.js | 2 +- webapp/src/pages/Bateria/Bateria.js | 1 - 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 581468c4..8c4e7143 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -28,7 +28,7 @@ app.get("/health", (req, res) => { res.json({ status: "OK" }); }); -var returnError = (res, error) => { +let returnError = (res, error) => { console.log(error); res.status(error.response.status).json({ error: error.response.data.error }); } @@ -246,7 +246,7 @@ app.get("/ranking", async (req, res) => { } }); -var openapiPath='./openapi.yaml' +let openapiPath='./openapi.yaml' if (fs.existsSync(openapiPath)) { const file = fs.readFileSync(openapiPath, 'utf8'); diff --git a/webapp/src/components/CustomModal/CustomModal.js b/webapp/src/components/CustomModal/CustomModal.js index bcf6c0ad..31f1706e 100644 --- a/webapp/src/components/CustomModal/CustomModal.js +++ b/webapp/src/components/CustomModal/CustomModal.js @@ -1,6 +1,5 @@ import React from 'react'; -import { Button, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, ModalFooter } from '@chakra-ui/react'; -import { useDisclosure } from '@chakra-ui/react'; +import { Button, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, ModalFooter, useDisclosure } from '@chakra-ui/react'; import { useNavigate } from 'react-router-dom'; const CustomModal = ({ title, text, route }) => { diff --git a/webapp/src/components/Profile/Profile.js b/webapp/src/components/Profile/Profile.js index 6b6b24f8..c4816a6c 100644 --- a/webapp/src/components/Profile/Profile.js +++ b/webapp/src/components/Profile/Profile.js @@ -70,7 +70,7 @@ const Perfil = () => { {userData.games.slice(0, 10).map((game, index) => ( - + {game.gamemode} {game.gamemode === 'calculadora' ? '-' : game.correctAnswers} {game.gamemode === 'calculadora' ? '-' : game.incorrectAnswers} diff --git a/webapp/src/pages/Bateria/Bateria.js b/webapp/src/pages/Bateria/Bateria.js index e9c868a3..babd88ec 100644 --- a/webapp/src/pages/Bateria/Bateria.js +++ b/webapp/src/pages/Bateria/Bateria.js @@ -223,7 +223,6 @@ const JuegoPreguntas = () => { {preguntaActual.respuestas.map((respuesta, index) => ( @@ -217,14 +216,14 @@ const JuegoPreguntas = () => { ) : ( - {t("pages.wisebattery.question")} {indicePregunta + 1} + {t("pages.wisebattery.question")} {questionIndex + 1} -

{preguntaActual.pregunta}

+

{actualQuestion.pregunta}

- {preguntaActual.respuestas.map((respuesta, index) => ( + {actualQuestion.respuestas.map((respuesta, index) => ( @@ -201,8 +198,8 @@ const CalculadoraHumana = () => { Enviar{" "} -

{t('pages.humancalculator.time')} {Math.floor(tiempoRestante)}

-

{t('pages.humancalculator.score')} {puntuacion}

+

{t('pages.humancalculator.time')} {Math.floor(timeLeft)}

+

{t('pages.humancalculator.score')} {points}

{ const { t, i18n } = useTranslation(); const [isLoading, setIsLoading] = useState(true); - const [indicePregunta, setIndicePregunta] = useState(0); - const [puntuacion, setPuntuacion] = useState(0); - const [respuestaSeleccionada, setRespuestaSeleccionada] = useState(null); - const [tiempoRestante, setTiempoRestante] = useState(SECS_PER_QUESTION); - const [juegoTerminado, setJuegoTerminado] = useState(false); - const [preguntaTerminada, setPreguntaTerminada] = useState(false); - const [mostrarMenu, setMostrarMenu] = useState(false); // Estado para mostrar el menú al finalizar el juego - const [preguntas, setPreguntas] = useState([]); - const [preguntaActual, setPreguntaActual] = useState(""); + const [questionIndex, setQuestionIndex] = useState(0); + const [points, setPoints] = useState(0); + const [selectedAnswers, setSelectedAnswer] = useState(null); + const [timeLeft, setTimeLeft] = useState(SECS_PER_QUESTION); + const [endgame, setEndgame] = useState(false); + const [endQuestion, setEndQuestion] = useState(false); + const [showMenu, setShowMenu] = useState(false); + const [questions, setQuestions] = useState([]); + const [actualQuestion, setActualQuestion] = useState(""); const [progressPercent, setProgressPercent] = useState(100); const navigate = useNavigate(); //Used for user stats - const [preguntasCorrectas, setPreguntasCorrectas] = useState(0); - const [preguntasFalladas, setPreguntasFalladas] = useState(0); - const [tiempoTotal, setTiempoTotal] = useState(0); - const [tiempoMedio, setTiempoMedio] = useState(0); + const [correctAnswers, setCorrectAnswers] = useState(0); + const [incorrectAnswers, setIncorrectAnswers] = useState(0); + const [totalTime, setTotalTime] = useState(0); + const [averageTime, setAverageTime] = useState(0); const [questionsToSave, setQuestionsToSave] = useState([]); useEffect(() => { @@ -64,8 +64,8 @@ const JuegoPreguntas = () => { return response.json(); }) .then((data) => { - setPreguntas(data); - setPreguntaActual(data[0]); + setQuestions(data); + setActualQuestion(data[0]); setIsLoading(false); }) .catch((error) => { @@ -76,59 +76,59 @@ const JuegoPreguntas = () => { useEffect(() => { const roundedProgressPercent = ( - (tiempoRestante / SECS_PER_QUESTION) * + (timeLeft / SECS_PER_QUESTION) * 100 ).toFixed(2); setProgressPercent(roundedProgressPercent); const timer = setInterval(() => { - setTiempoRestante((prevTiempo) => + setTimeLeft((prevTiempo) => prevTiempo <= 0 ? 0 : prevTiempo - 0.01 ); }, 10); return () => clearInterval(timer); // eslint-disable-next-line - }, [tiempoRestante]); + }, [timeLeft]); useEffect(() => { - if (tiempoRestante === 0) { - const newTTotal = tiempoTotal + SECS_PER_QUESTION; - setTiempoTotal(newTTotal); - setPreguntaTerminada(true); + if (timeLeft === 0) { + const newTTotal = totalTime + SECS_PER_QUESTION; + setTotalTime(newTTotal); + setEndQuestion(true); setTimeout(() => { - setPreguntaTerminada(false); - handleSiguientePregunta(); + setEndQuestion(false); + handleNextQuestion(); }, 3000); } const timer = setInterval(() => { - setTiempoRestante((prevTiempo) => (prevTiempo <= 0 ? 0 : prevTiempo - 1)); + setTimeLeft((prevTiempo) => (prevTiempo <= 0 ? 0 : prevTiempo - 1)); }, 1000); return () => clearInterval(timer); // eslint-disable-next-line - }, [tiempoRestante]); + }, [timeLeft]); useEffect(() => { - if (juegoTerminado) { - setMostrarMenu(true); + if (endgame) { + setShowMenu(true); } // eslint-disable-next-line - }, [juegoTerminado]); + }, [endgame]); - const handleRespuestaSeleccionada = (respuesta) => { - if (!juegoTerminado) { - setRespuestaSeleccionada(respuesta); + const handleAnsweredQuestion = (respuesta) => { + if (!endgame) { + setSelectedAnswer(respuesta); } }; - const estiloRespuesta = (respuesta) => { - if (preguntaTerminada) { - if (respuesta === preguntaActual.correcta) { + const answerStyle = (answer) => { + if (endQuestion) { + if (answer === actualQuestion.correcta) { return { backgroundColor: "#10FF00" }; - } else if (respuesta === respuestaSeleccionada) { + } else if (answer === selectedAnswers) { return { backgroundColor: "red" }; } - } else if (respuesta === respuestaSeleccionada) { + } else if (answer === selectedAnswers) { return isDarkTheme ? { color: "#333333", backgroundColor: "#F0F0F0" } : { backgroundColor: "#333333", color: "#F0F0F0" }; @@ -136,93 +136,88 @@ const JuegoPreguntas = () => { return {}; }; - const handleSiguientePregunta = () => { - if (respuestaSeleccionada === preguntaActual.correcta) { - const newCorrectQuestions = preguntasCorrectas + 1; - setPuntuacion(puntuacion + 1); - setPreguntasCorrectas(newCorrectQuestions); + const handleNextQuestion = () => { + if (selectedAnswers === actualQuestion.correcta) { + const newCorrectQuestions = correctAnswers + 1; + setPoints(points + 1); + setCorrectAnswers(newCorrectQuestions); } else { - const newIncorrectQuestions = preguntasFalladas + 1; - setPreguntasFalladas(newIncorrectQuestions); + const newIncorrectQuestions = incorrectAnswers + 1; + setIncorrectAnswers(newIncorrectQuestions); } - const pregunta = { - pregunta: preguntaActual.pregunta, - respuestas: preguntaActual.respuestas, - correcta: preguntaActual.correcta, - respuesta: respuestaSeleccionada, + const question = { + pregunta: actualQuestion.pregunta, + respuestas: actualQuestion.respuestas, + correcta: actualQuestion.correcta, + respuesta: selectedAnswers, }; - setQuestionsToSave([...questionsToSave, pregunta]); + setQuestionsToSave([...questionsToSave, question]); - setTiempoTotal(tiempoTotal + tiempoRestante); - setRespuestaSeleccionada(null); - setTiempoRestante(10); + setTotalTime(totalTime + timeLeft); + setSelectedAnswer(null); + setTimeLeft(10); setProgressPercent(100); - if (indicePregunta + 1 < preguntas.length) { - setIndicePregunta(indicePregunta + 1); - setPreguntaActual(preguntas[indicePregunta + 1]); + if (questionIndex + 1 < questions.length) { + setQuestionIndex(questionIndex + 1); + setActualQuestion(questions[questionIndex + 1]); } else { - setJuegoTerminado(true); - if (preguntasCorrectas + preguntasFalladas > 0) { - const preguntasTotales = preguntasCorrectas + preguntasFalladas; - const tMedio = tiempoTotal / preguntasTotales; - setTiempoMedio(tMedio); + setEndgame(true); + if (correctAnswers + incorrectAnswers > 0) { + const totalAnswers = correctAnswers + incorrectAnswers; + const avgTime = totalTime / totalAnswers; + setAverageTime(avgTime); } } }; useEffect(() => { - if (juegoTerminado && tiempoMedio !== 0) { - guardarPartida(); + if (endgame && averageTime !== 0) { + saveGame(); } // eslint-disable-next-line - }, [juegoTerminado]); + }, [endgame]); - const guardarPartida = async () => { + const saveGame = async () => { //Now we store the game in the stats DB const username = localStorage.getItem("username"); const newGame = { username: username, gameMode: "clasico", gameData: { - correctAnswers: preguntasCorrectas, - incorrectAnswers: preguntasFalladas, - points: puntuacion, - avgTime: tiempoMedio, + correctAnswers: correctAnswers, + incorrectAnswers: incorrectAnswers, + points: points, + avgTime: averageTime, }, questions: questionsToSave, }; try { - const response = await axios.post(URL + "/saveGameList", newGame); - console.log("Solicitud exitosa:", response.data); + await axios.post(URL + "/saveGameList", newGame); } catch (error) { - console.error( - "Error al guardar el juego en la lista de partidas:", - error - ); + console.error(error); } try { - const response = await axios.post(URL + "/saveGame", newGame); - console.log("Solicitud exitosa:", response.data); + await axios.post(URL + "/saveGame", newGame); } catch (error) { console.error("Error al guardar el juego:", error); } }; const handleRepetirJuego = () => { - // Reiniciar el estado para repetir el juego - setIndicePregunta(0); - setPuntuacion(0); - setRespuestaSeleccionada(null); - setTiempoRestante(10); - setJuegoTerminado(false); - setMostrarMenu(false); - setPreguntasCorrectas(0); - setPreguntasFalladas(0); - setTiempoMedio(0); - setTiempoTotal(0); + // Reset all the game variables + setQuestionIndex(0); + setPoints(0); + setSelectedAnswer(null); + setTimeLeft(10); + setEndgame(false); + setShowMenu(false); + setCorrectAnswers(0); + setIncorrectAnswers(0); + setAverageTime(0); + setTotalTime(0); }; if (isLoading) { @@ -254,13 +249,13 @@ const JuegoPreguntas = () => { borderRadius="lg" boxShadow="lg" > - {mostrarMenu ? ( + {showMenu ? ( {t("pages.classic.finished")}

- {t("pages.classic.score")} {puntuacion}/{preguntas.length} + {t("pages.classic.score")} {points}/{questions.length}

- {preguntasFalladas === 0 ? ( + {incorrectAnswers === 0 ? ( Jordi Hurtado {t("pages.classic.easterEgg")} @@ -278,15 +273,15 @@ const JuegoPreguntas = () => { ) : ( - {t("pages.classic.question")} {indicePregunta + 1} + {t("pages.classic.question")} {questionIndex + 1} -

{preguntaActual.pregunta}

+

{actualQuestion.pregunta}

- {preguntaActual.respuestas.map((respuesta, index) => ( + {actualQuestion.respuestas.map((respuesta, index) => (