Skip to content

Commit

Permalink
Merge pull request #49 from Arquisoft/Cancio-fixes
Browse files Browse the repository at this point in the history
Cancio fixes
  • Loading branch information
CANCI0 authored Mar 7, 2024
2 parents 3c0d33c + 8080a75 commit 88ac67d
Show file tree
Hide file tree
Showing 7 changed files with 162 additions and 98 deletions.
1 change: 0 additions & 1 deletion questionservice/data/tematicas.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
"¿Cuál es la esperanza de vida media de ",
"¿En qué fecha se fundó ",
"¿Cuál es la forma de gobierno de ",

"¿Cuál es el lema de "
]
},
Expand Down
9 changes: 9 additions & 0 deletions questionservice/question-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const GeneratorChooser = require("./questionGen/GeneratorChooser");

const app = express();
const port = 8003;
let generadoresCargados = false;

const gen = new GeneratorChooser();
const MAX_QUESTIONS = 10000;
Expand All @@ -16,6 +17,13 @@ app.use(bodyParser.json());

app.use(cors());

app.use((req, res, next) => {
if (!generadoresCargados) {
return res.status(500).json({ error: "Los generadores de preguntas aún no se han cargado. Por favor, inténtalo de nuevo más tarde." });
}
next();
});

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

app.get("/questions", async (req, res) => {
Expand All @@ -39,6 +47,7 @@ const server = app.listen(port, async () => {
gen.loadGenerators()
.then(() => {
console.log("Generators loaded successfully!");
generadoresCargados = true;
})
.catch((error) => {
console.error("Error al cargar los generadores de preguntas:", error);
Expand Down
8 changes: 5 additions & 3 deletions questionservice/questionGen/GenericGenerator.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,9 @@ class GenericGenerator {
if (
!questionObj.respuestas.includes(prop) &&
!entidad[propiedadPregunta].includes(prop) &&
!/^Q\d+/.test(prop)
!/^Q\d+/.test(prop) &&
entidadLabel != prop

) {
questionObj.respuestas.push(prop);
}
Expand All @@ -143,8 +145,8 @@ class GenericGenerator {
questionObj.correcta = this.#dateFormatter(questionObj.correcta);
break;
case "num":
questionObj.respuestas = questionObj.respuestas.map(x => Math.floor(x));
questionObj.correcta = Math.floor(questionObj.correcta);
questionObj.respuestas = questionObj.respuestas.map(x => parseFloat(x).toFixed(2));
questionObj.correcta = parseFloat(questionObj.correcta).toFixed(2);
break;
default:
break;
Expand Down
17 changes: 17 additions & 0 deletions webapp/src/pages/Bateria/Bateria.css
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,20 @@ button{
margin: 0;
}

/* HTML: <div class="loader"></div> */
.loader {
width: 50px;
padding: 8px;
aspect-ratio: 1;
border-radius: 50%;
background: #25b09b;
--_m:
conic-gradient(#0000 10%,#000),
linear-gradient(#000 0 0) content-box;
-webkit-mask: var(--_m);
mask: var(--_m);
-webkit-mask-composite: source-out;
mask-composite: subtract;
animation: l3 1s infinite linear;
}
@keyframes l3 {to{transform: rotate(1turn)}}
81 changes: 54 additions & 27 deletions webapp/src/pages/Bateria/Bateria.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,44 @@
import React, { useState, useEffect } from "react";
import "./Bateria.css";
import Nav from '../../components/Nav/Nav.js';
import Nav from "../../components/Nav/Nav.js";
import Footer from "../../components/Footer/Footer.js";
import Preguntas from "./prueba";
import { Link } from 'react-router-dom';
import { Link, useNavigate } from "react-router-dom";

const JuegoPreguntas = () => {
const [isLoading, setIsLoading] = useState(true);
const [indicePregunta, setIndicePregunta] = useState(0);
const [puntuacion, setPuntuacion] = useState(0);
const [tiempoRestante, setTiempoRestante] = useState(10);
const [tiempoRestante, setTiempoRestante] = useState(180);
const [juegoTerminado, setJuegoTerminado] = useState(false);
const preguntaActual = Preguntas[indicePregunta];
const [preguntas, setPreguntas] = useState([]);
const [preguntaActual, setPreguntaActual] = useState("");
const navigate = useNavigate();

useEffect(() => {
if (tiempoRestante === 0 || indicePregunta === Preguntas.length) {
fetch("http://localhost:8003/questions?tematica=all&n=10000")
.then((response) => {
if (!response.ok) {
navigate("/home?error=1");
return;
}
return response.json();
})
.then((data) => {
setPreguntas(data);
setPreguntaActual(data[0]);
setIsLoading(false);
})
.catch((error) => {
console.error("Error al obtener las preguntas:", error);
navigate("/home?error=1");
});
}, []);

useEffect(() => {
if (isLoading) {
return;
}
if (tiempoRestante === 0 || indicePregunta === preguntas.length) {
setJuegoTerminado(true);
}
const timer = setInterval(() => {
Expand All @@ -26,7 +51,7 @@ const JuegoPreguntas = () => {
if (respuesta === preguntaActual.correcta) {
setPuntuacion(puntuacion + 1);
}
if (indicePregunta + 1 < Preguntas.length) {
if (indicePregunta + 1 < preguntas.length) {
setIndicePregunta(indicePregunta + 1);
} else {
setJuegoTerminado(true);
Expand All @@ -47,9 +72,7 @@ const JuegoPreguntas = () => {
<Nav />
<div className="menuContainer">
<h2>¡Juego terminado!</h2>
<p>
Tu puntuación: {puntuacion}
</p>
<p>Tu puntuación: {puntuacion}</p>
<button onClick={handleRepetirJuego}>Repetir Juego</button>
<Link to="/home">Volver al Menú Principal</Link>
</div>
Expand All @@ -61,24 +84,28 @@ const JuegoPreguntas = () => {
return (
<>
<Nav />
<div className="questionContainer">
<h2>Pregunta {indicePregunta + 1}:</h2>
<p>{preguntaActual.pregunta}</p>
<div className="responsesContainer">
{preguntaActual.respuestas.map((respuesta, index) => (
<button
key={index}
onClick={() => {
handleSiguientePregunta(respuesta);
}}
>
{respuesta}
</button>
))}
</div>
<div className="timer">Tiempo restante: {tiempoRestante}</div>
<div className="points">Puntuación: {puntuacion}</div>
{isLoading ? (
<span class="loader"></span>
) : (
<div className="questionContainer">
<h2>Pregunta {indicePregunta + 1}:</h2>
<p>{preguntaActual.pregunta}</p>
<div className="responsesContainer">
{preguntaActual.respuestas.map((respuesta, index) => (
<button
key={index}
onClick={() => {
handleSiguientePregunta(respuesta);
}}
>
{respuesta}
</button>
))}
</div>
<div className="timer">Tiempo restante: {tiempoRestante}</div>
<div className="points">Puntuación: {puntuacion}</div>
</div>
)}
<Footer />
</>
);
Expand Down
Loading

0 comments on commit 88ac67d

Please sign in to comment.