diff --git a/questionservice/data/tematicas.json b/questionservice/data/tematicas.json
index 15aa1241..fc2b0003 100644
--- a/questionservice/data/tematicas.json
+++ b/questionservice/data/tematicas.json
@@ -1,129 +1,278 @@
{
- "paises": {
- "entity": "Q6256",
- "props": ["P36", "P35", "P1344", "P37", "P47", "P2250", "P571", "P122", "P1451"],
- "types": ["str", "str", "str", "str", "str", "num", "date", "str", "str"],
- "preguntas": [
- {
- "es": "¿Cuál es la capital de %?",
- "en": "What is the capital of %?"
- },
- {
- "es": "¿Quién es el jefe de estado de % ?",
- "en": "Who is the head of state of %?"
- },
- {
- "es": "¿En qué evento histórico participó % ?",
- "en": "In what historical event did % participate?"
- },
- {
- "es": "¿Cuál es uno de los idiomas oficiales de % ?",
- "en": "What is one of the official languages of %?"
- },
- {
- "es": "¿Con qué país comparte frontera % ?",
- "en": "Which country shares a border with %?"
- },
- {
- "es": "¿Cuál es la esperanza de vida media de % ?",
- "en": "What is the average life expectancy of %?"
- },
- {
- "es": "¿En qué fecha se fundó % ?",
- "en": "On what date was % founded?"
- },
- {
- "es": "¿Cuál es la forma de gobierno de % ?",
- "en": "What is the form of government of %?"
- },
- {
- "es": "¿Cuál es el lema de % ?",
- "en": "What is the motto of %?"
- }
- ]
- },
- "literatura": {
- "entity": "Q7725634",
- "props": ["P50", "P577", "P136", "P674"],
- "types": ["str", "date", "str", "str"],
- "preguntas": [
- {
- "es": "¿Quién es el autor de la obra literaria % ?",
- "en": "Who is the author of the literary work %?"
- },
- {
- "es": "¿Cuál fue la fecha de publicación de la obra literaria % ?",
- "en": "What was the publication date of the literary work %?"
- },
- {
- "es": "¿Cuál es el género de la obra literaria % ?",
- "en": "What is the genre of the literary work %?"
- },
- {
- "es": "¿Cuál es uno de los personajes de la obra literaria % ?",
- "en": "Who is one of the characters in the literary work %?"
- }
- ]
- },
- "cine": {
- "entity": "Q11424",
- "props": ["P577", "P57", "P2130"],
- "types": ["date", "str", "num"],
- "preguntas": [
- {
- "es": "¿En qué fecha se estrenó el film % ?",
- "en": "On what date was the film % released?"
- },
- {
- "es": "¿Quién es director de la película % ?",
- "en": "Who is the director of the movie %?"
- },
- {
- "es": "¿Cuál fue el presupuesto (en USD) de la película % ?",
- "en": "What was the budget (in USD) of the movie %?"
- }
- ]
- },
- "arte": {
- "entity": "Q3305213",
- "props": ["P571", "P135", "P276"],
- "types": ["date", "str", "str"],
- "preguntas": [
- {
- "es": "¿En qué año se pintó la obra % ?",
- "en": "In what year was the artwork % painted?"
- },
- {
- "es": "¿A qué movimiento artístico pertenece la obra % ?",
- "en": "To which artistic movement does the artwork % belong?"
- },
- {
- "es": "¿Dónde está exhibida la obra % ?",
- "en": "Where is the artwork % exhibited?"
- }
- ]
- },
- "programacion": {
- "entity": "Q9143",
- "props": ["P571", "P287", "P348", "P1195"],
- "types": ["date", "str", "str", "str"],
- "preguntas": [
- {
- "es": "¿En qué fecha se creó el lenguaje de programación % ?",
- "en": "On what date was the programming language % created?"
- },
- {
- "es": "¿Quién es el creador del lenguaje de programación % ?",
- "en": "Who is the creator of the programming language %?"
- },
- {
- "es": "¿Cuál es la última versión del lenguaje de programación % ?",
- "en": "What is the latest version of the programming language %?"
- },
- {
- "es": "¿Cuál es una de las extensiones usadas por el lenguaje de programación % ?",
- "en": "What is one of the extensions used by the programming language %?"
- }
- ]
- }
+ "paises": {
+ "entity": "wdt:P31 wd:Q6256",
+ "props": [
+ "P36",
+ "P35",
+ "P1344",
+ "P37",
+ "P47",
+ "P2250",
+ "P571",
+ "P122",
+ "P1451"
+ ],
+ "types": ["str", "str", "str", "str", "str", "num", "date", "str", "str"],
+ "preguntas": [
+ {
+ "es": "¿Cuál es la capital de %?",
+ "en": "What is the capital of %?"
+ },
+ {
+ "es": "¿Quién es el jefe de estado de % ?",
+ "en": "Who is the head of state of %?"
+ },
+ {
+ "es": "¿En qué evento histórico participó %?",
+ "en": "In what historical event did % participate?"
+ },
+ {
+ "es": "¿Cuál es uno de los idiomas oficiales de %?",
+ "en": "What is one of the official languages of %?"
+ },
+ {
+ "es": "¿Con qué país comparte frontera %?",
+ "en": "Which country shares a border with %?"
+ },
+ {
+ "es": "¿Cuál es la esperanza de vida media de %?",
+ "en": "What is the average life expectancy of %?"
+ },
+ {
+ "es": "¿En qué fecha se fundó %?",
+ "en": "On what date was % founded?"
+ },
+ {
+ "es": "¿Cuál es la forma de gobierno de %?",
+ "en": "What is the form of government of %?"
+ },
+ {
+ "es": "¿Cuál es el lema de %?",
+ "en": "What is the motto of %?"
+ }
+ ]
+ },
+ "literatura": {
+ "entity": "wdt:P31 wd:Q7725634",
+ "props": ["P50", "P577", "P136", "P674"],
+ "types": ["str", "date", "str", "str"],
+ "preguntas": [
+ {
+ "es": "¿Quién es el autor de la obra literaria %?",
+ "en": "Who is the author of the literary work %?"
+ },
+ {
+ "es": "¿Cuál fue la fecha de publicación de la obra literaria %?",
+ "en": "What was the publication date of the literary work %?"
+ },
+ {
+ "es": "¿Cuál es el género de la obra literaria %?",
+ "en": "What is the genre of the literary work %?"
+ },
+ {
+ "es": "¿Cuál es uno de los personajes de la obra literaria %?",
+ "en": "Who is one of the characters in the literary work %?"
+ }
+ ]
+ },
+ "cine": {
+ "entity": "wdt:P31 wd:Q11424",
+ "props": ["P577", "P57", "P2130"],
+ "types": ["date", "str", "num"],
+ "preguntas": [
+ {
+ "es": "¿En qué fecha se estrenó el film %?",
+ "en": "On what date was the film % released?"
+ },
+ {
+ "es": "¿Quién es director de la película %?",
+ "en": "Who is the director of the movie %?"
+ },
+ {
+ "es": "¿Cuál fue el presupuesto (en USD) de la película %?",
+ "en": "What was the budget (in USD) of the movie %?"
+ }
+ ]
+ },
+ "arte": {
+ "entity": "wdt:P31 wd:Q3305213",
+ "props": ["P571", "P135", "P276"],
+ "types": ["date", "str", "str"],
+ "preguntas": [
+ {
+ "es": "¿En qué año se pintó la obra %?",
+ "en": "In what year was the artwork % painted?"
+ },
+ {
+ "es": "¿A qué movimiento artístico pertenece la obra %?",
+ "en": "To which artistic movement does the artwork % belong?"
+ },
+ {
+ "es": "¿Dónde está exhibida la obra %?",
+ "en": "Where is the artwork % exhibited?"
+ }
+ ]
+ },
+ "programacion": {
+ "entity": "wdt:P31 wd:Q9143",
+ "props": ["P571", "P287", "P348", "P1195"],
+ "types": ["date", "str", "str", "str"],
+ "preguntas": [
+ {
+ "es": "¿En qué fecha se creó el lenguaje de programación %?",
+ "en": "On what date was the programming language % created?"
+ },
+ {
+ "es": "¿Quién es el creador del lenguaje de programación %?",
+ "en": "Who is the creator of the programming language %?"
+ },
+ {
+ "es": "¿Cuál es la última versión del lenguaje de programación %?",
+ "en": "What is the latest version of the programming language %?"
+ },
+ {
+ "es": "¿Cuál es una de las extensiones usadas por el lenguaje de programación %?",
+ "en": "What is one of the extensions used by the programming language %?"
+ }
+ ]
+ },
+ "futbolistas": {
+ "entity": "wdt:P106 wd:Q937857",
+ "props": ["P569", "P413", "P1618", "P2048", "P103"],
+ "types": ["date", "str", "str", "str", "str"],
+ "preguntas": [
+ {
+ "es": "¿En qué fecha nació el futbolista %?",
+ "en": "On what date was the footballer % born?"
+ },
+ {
+ "es": "¿En posición juega el futbolista %?",
+ "en": "In what position does the footballer % play?"
+ },
+ {
+ "es": "¿Qué número de camiseta usa el futbolista %?",
+ "en": "What shirt number does the footballer % wear?"
+ },
+ {
+ "es": "¿Cuál es la altura del futbolista %?",
+ "en": "What is the height of the footballer %?"
+ },
+ {
+ "es": "¿Cuál es la lengua materna del futbolista %?",
+ "en": "What is the mother tongue of the footballer %?"
+ }
+ ]
+ },
+ "clubes": {
+ "entity": "wdt:P31 wd:Q476028",
+ "props": ["P571", "P159", "P17", "P112", "P115", "P286"],
+ "types": ["date", "str", "str", "str", "str"],
+ "preguntas": [
+ {
+ "es": "¿En qué año se fundó el club de fútbol %?",
+ "en": "In what year was the club % founded?"
+ },
+ {
+ "es": "¿En qué ciudad se encuentra la sede del club de fútbol %?",
+ "en": "In what city is the headquarters of the club %?"
+ },
+ {
+ "es": "¿De qué país es originario el club de fútbol %?",
+ "en": "From which country is the club %?"
+ },
+ {
+ "es": "¿Quién es el fundador el club de fútbol %?",
+ "en": "Who is the founder of the football club %?"
+ },
+ {
+ "es": "¿Cuál es el estadio del club de fútbol %?",
+ "en": "What is the stadium of the football club %?"
+ },
+ {
+ "es": "¿Cuál es el entrenador del club de fútbol %?",
+ "en": "Who is the coach of the football club %?"
+ }
+ ]
+ },
+ "baloncestistas": {
+ "entity": "wdt:P106 wd:Q3665646",
+ "props": ["P413", "P2031", "P54", "P2048", "P1618"],
+ "types": ["str", "date", "str", "str", "str"],
+ "preguntas": [
+ {
+ "es": "¿En qué posición juega el baloncestista %?",
+ "en": "In what position does the basketball player % play?"
+ },
+ {
+ "es": "¿Cuál es la fecha de inicio de la carrera del baloncestista %?",
+ "en": "What is the start date of the basketball player % career?"
+ },
+ {
+ "es": "¿Cuál es el equipo actual del baloncestista %?",
+ "en": "What is the current team of the basketball player %?"
+ },
+ {
+ "es": "¿Cuál es la altura del baloncestista %?",
+ "en": "What is the height of the basketball player %?"
+ },
+ {
+ "es": "¿Cuál es el número del baloncestista %?",
+ "en": "What is the number of the basketball player %?"
+ }
+ ]
+ },
+ "politica": {
+ "entity": "wdt:P31 wd:Q6065085",
+ "props": ["P571", "P112", "P3975", "P1387", "P1142"],
+ "types": ["date", "str", "str", "str", "str"],
+ "preguntas": [
+ {
+ "es": "¿En qué fecha se fundó el partido político %?",
+ "en": "On what date was the political party % founded?"
+ },
+ {
+ "es": "¿Quién es el fundador del partido político %?",
+ "en": "Who is the founder of the political party %?"
+ },
+ {
+ "es": "¿Quién es el secretario general del partido político %?",
+ "en": "Who is the general secretary of the political party %?"
+ },
+ {
+ "es": "¿Cuál es la posición en el espectro político del partido %?",
+ "en": "What is the position on the political spectrum of the party %?"
+ },
+ {
+ "es": "¿Cuál es una de las ideologías del partido político %?",
+ "en": "What is one of the ideologies of the political party %?"
+ }
+ ]
+ },
+ "videojuegos": {
+ "entity": "wdt:P31 wd:Q7889",
+ "props": ["P136", "P123", "P495", "P577", "P57"],
+ "types": ["str", "str", "str", "date", "str"],
+ "preguntas": [
+ {
+ "es": "¿Cuál es el género del videojuego %?",
+ "en": "What is the genre of the video game %?"
+ },
+ {
+ "es": "¿Quién es el desarrollador del videojuego %?",
+ "en": "Who is the developer of the video game %?"
+ },
+ {
+ "es": "¿En qué país se desarrolló el videojuego %?",
+ "en": "In which country was the video game % developed?"
+ },
+ {
+ "es": "¿En qué fecha se lanzó el videojuego %?",
+ "en": "On what date was the video game % released?"
+ },
+ {
+ "es": "¿Quién es el director del videojuego %?",
+ "en": "Who is the director of the video game %?"
+ }
+ ]
+ }
}
diff --git a/questionservice/question-service.js b/questionservice/question-service.js
index 60998ab1..d14a3f65 100644
--- a/questionservice/question-service.js
+++ b/questionservice/question-service.js
@@ -69,7 +69,7 @@ app.post("/questions", async (req, res) => {
const tematicasValidas =
temas.length !== 0
? temas
- : ["paises", "literatura", "cine", "arte", "programacion"];
+ : ["paises", "literatura", "cine", "arte", "programacion", "futbolistas", "clubes", "baloncestistas", "politica", "videojuegos"];
const cantidadPreguntas = parseInt(n, 10);
const data = gen.getQuestionsPost(tematicasValidas, cantidadPreguntas, locale);
res.json(data);
diff --git a/questionservice/questionGen/GenericGenerator.js b/questionservice/questionGen/GenericGenerator.js
index 1cf277f2..b92499c9 100644
--- a/questionservice/questionGen/GenericGenerator.js
+++ b/questionservice/questionGen/GenericGenerator.js
@@ -67,13 +67,13 @@ class GenericGenerator {
this.props
).join(" ")}
WHERE {
- ?entity wdt:P31 wd:${this.entity};
+ ?entity ${this.entity};
${this.#generateProps(this.props)} .
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es" }
}
LIMIT 10000
`;
-
+
const url = `https://query.wikidata.org/sparql?query=${encodeURIComponent(
sparqlQuery
)}&format=json`;
@@ -102,19 +102,19 @@ class GenericGenerator {
var respuestaCorrecta = "";
var propIndex = 0;
- do{
+ do {
propIndex = Math.floor(Math.random() * propiedades.length);
var propiedadPregunta = propiedades[propIndex];
// Obtener la respuesta correcta
respuestaCorrecta =
entidad[propiedadPregunta][entidad[propiedadPregunta].length - 1];
- }while(/^Q\d+/.test(respuestaCorrecta));
+ } while (/^Q\d+/.test(respuestaCorrecta));
var questionObj = {
pregunta: "",
respuestas: [respuestaCorrecta],
- correcta: respuestaCorrecta
+ correcta: respuestaCorrecta,
};
// Obtener respuestas incorrectas
@@ -130,7 +130,6 @@ class GenericGenerator {
!entidad[propiedadPregunta].includes(prop) &&
!/^Q\d+/.test(prop) &&
entidadLabel != prop
-
) {
questionObj.respuestas.push(prop);
}
@@ -139,21 +138,26 @@ class GenericGenerator {
// Barajar las opciones de respuesta
questionObj.respuestas.sort(() => Math.random() - 0.5);
- switch(this.types[propIndex]){
+ switch (this.types[propIndex]) {
case "date":
- questionObj.respuestas = questionObj.respuestas.map(x => this.#dateFormatter(x));
+ questionObj.respuestas = questionObj.respuestas.map((x) =>
+ this.#dateFormatter(x)
+ );
questionObj.correcta = this.#dateFormatter(questionObj.correcta);
break;
case "num":
- questionObj.respuestas = questionObj.respuestas.map(x => parseFloat(x).toFixed(2));
+ questionObj.respuestas = questionObj.respuestas.map((x) =>
+ parseFloat(x).toFixed(2)
+ );
questionObj.correcta = parseFloat(questionObj.correcta).toFixed(2);
break;
default:
break;
}
- questionObj.pregunta =
- this.preguntasMap.get(propiedadPregunta)[locale].replace('%', entidadLabel);
-
+ questionObj.pregunta = this.preguntasMap
+ .get(propiedadPregunta)
+ [locale].replace("%", entidadLabel);
+
return questionObj;
}
@@ -170,18 +174,20 @@ class GenericGenerator {
#dateFormatter(fecha) {
var isAC = false;
- if(fecha.startsWith('-')){
- isAC = true;
- fecha = fecha.substring(1);
+ if (fecha.startsWith("-")) {
+ isAC = true;
+ fecha = fecha.substring(1);
}
- const [año, mes, dia] = fecha.split('T')[0].split('-').map(n => Number.parseInt(n).toFixed());
+ const [año, mes, dia] = fecha
+ .split("T")[0]
+ .split("-")
+ .map((n) => Number.parseInt(n).toFixed());
- const fechaFormateada = `${dia}/${mes}/${año}${isAC ? ' a.C.' : ''}`;
-
- return fechaFormateada;
-}
+ const fechaFormateada = `${dia}/${mes}/${año}${isAC ? " a.C." : ""}`;
+ return fechaFormateada;
+ }
}
module.exports = GenericGenerator;
diff --git a/users/userservice/user-service.js b/users/userservice/user-service.js
index eae3ca76..6823d844 100644
--- a/users/userservice/user-service.js
+++ b/users/userservice/user-service.js
@@ -272,7 +272,7 @@ app.post("/saveGameList", async (req, res) => {
}
const gameDataWithGamemode = { ...gameData, gamemode, questions };
- if(gamemode!=="classic" && gamemode!=="bateria" && gamemode!=="calculadora"){
+ if(gamemode!=="clasico" && gamemode!=="bateria" && gamemode!=="calculadora"){
return res.status(422).json({ error: "Invalid gamemode" });
}
diff --git a/users/userservice/user-service.test.js b/users/userservice/user-service.test.js
index 9b993b09..87cb723e 100644
--- a/users/userservice/user-service.test.js
+++ b/users/userservice/user-service.test.js
@@ -94,7 +94,7 @@ describe("User Service", () => {
// Datos de la partida a guardar
const gameData = {
username: "testuser",
- gameMode: "classic",
+ gameMode: "clasico",
gameData: {
points: 100,
correctAnswers: 8,
@@ -115,7 +115,7 @@ describe("User Service", () => {
// Datos de la partida a guardar
const gameData = {
username: "testuseraaa",
- gameMode: "classic",
+ gameMode: "clasico",
gameData: {
points: 100,
correctAnswers: 8,
diff --git a/webapp/src/index.js b/webapp/src/index.js
index 9e56989d..405d7f6d 100644
--- a/webapp/src/index.js
+++ b/webapp/src/index.js
@@ -13,7 +13,7 @@ const root = ReactDOM.createRoot(r);
localStorage.setItem(
"selectedThemes",
- JSON.stringify(["paises", "literatura", "cine", "arte", "programacion"])
+ JSON.stringify(["paises", "literatura", "cine", "arte", "programacion", "futbolistas", "clubes", "baloncestistas", "politica", "videojuegos"])
);
localStorage.setItem("clasicoTime", 10);
localStorage.setItem("clasicoPreguntas", 10);
diff --git a/webapp/src/locales/en.json b/webapp/src/locales/en.json
index f609cabe..0cf88c18 100644
--- a/webapp/src/locales/en.json
+++ b/webapp/src/locales/en.json
@@ -98,6 +98,11 @@
"cinema": "Cinema",
"art": "Art",
"programming": "Programming",
+ "futbolistas": "Football players",
+ "clubes": "Footbal clubs",
+ "baloncestistas": "Basketball players",
+ "politica": "Politics",
+ "videojuegos": "Videogames",
"save": "Apply Changes",
"timeBetweenClassic": "Time Between Questions (Classic)",
"questionCountClassic": "Number of Questions (Classic)",
diff --git a/webapp/src/locales/es.json b/webapp/src/locales/es.json
index 77ef1f57..df2ec035 100644
--- a/webapp/src/locales/es.json
+++ b/webapp/src/locales/es.json
@@ -98,6 +98,11 @@
"cinema": "Cine",
"art": "Arte",
"programming": "Programación",
+ "futbolistas": "Futbolistas",
+ "clubes": "Clubes de fútbol",
+ "baloncestistas": "Jugadores de baloncesto",
+ "politica": "Política",
+ "videojuegos": "Videojuegos",
"save": "Aplicar cambios",
"timeBetweenClassic": "Tiempo entre preguntas (Clásico)",
"questionCountClassic": "Número de preguntas (Clásico)",
diff --git a/webapp/src/pages/Config/Config.js b/webapp/src/pages/Config/Config.js
index f8197f00..c1437f24 100644
--- a/webapp/src/pages/Config/Config.js
+++ b/webapp/src/pages/Config/Config.js
@@ -19,7 +19,7 @@ import { useNavigate } from "react-router-dom";
import { useTranslation } from "react-i18next";
const Config = () => {
- const { t, i18n} = useTranslation();
+ const { t, i18n } = useTranslation();
useEffect(() => {
// Obtener el estado de los checkboxes desde el localStorage
@@ -86,45 +86,62 @@ const Config = () => {
<>
-
+
- {t('pages.config.title')}
+ {t("pages.config.title")}
- {t('pages.config.language')}
+ {t("pages.config.language")}
-
-
+
+
- {t('pages.config.topics')}
-
-
-
- {t('pages.config.countries')}
-
-
- {t('pages.config.literature')}
-
-
- {t('pages.config.cinema')}
-
-
- {t('pages.config.art')}
-
-
- {t('pages.config.programming')}
-
-
-
-
+ {t("pages.config.topics")}
+
+
+ {t("pages.config.countries")}
+
+
+ {t("pages.config.literature")}
+
+
+ {t("pages.config.cinema")}
+
+
+ {t("pages.config.art")}
+
+
+ {t("pages.config.programming")}
+
+
+ {t("pages.config.futbolistas")}
+
+
+ {t("pages.config.clubes")}
+
+
+ {t("pages.config.baloncestistas")}
+
+
+ {t("pages.config.politica")}
+
+
+ {t("pages.config.videojuegos")}
+
+
{" "}
- {t('pages.config.timeBetweenClassic')}
+ {t("pages.config.timeBetweenClassic")}
{
{" "}
- {t('pages.config.questionCountClassic')}
+ {t("pages.config.questionCountClassic")}
{
- {t('pages.config.totalTimeBattery')}
+ {t("pages.config.totalTimeBattery")}
{