From 3cd3d52fb332bd4acd57afadfdad21e552b4fe96 Mon Sep 17 00:00:00 2001 From: sara <sarafergonza@gmail.com> Date: Thu, 29 Feb 2024 18:41:05 +0100 Subject: [PATCH 1/2] planteamiento sistema de preguntas --- .idea/workspace.xml | 37 +++++++++++----- questions/SPARQLQueryDispatcher.js | 12 ++++++ questions/createqservice/question-service.js | 45 ++++++++++---------- 3 files changed, 61 insertions(+), 33 deletions(-) create mode 100644 questions/SPARQLQueryDispatcher.js diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 7c5aea98..57ce6308 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,21 +4,22 @@ <option name="autoReloadType" value="SELECTIVE" /> </component> <component name="ChangeListManager"> - <list default="true" id="f3a70bc3-1f0b-4042-a99e-e960a2b1db01" name="Changes" comment=""> - <change afterPath="$PROJECT_DIR$/.idea/jsLibraryMappings.xml" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/practicas/.idea/workspace.xml" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/questions/createqservice/package-lock.json" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/questions/createqservice/package.json" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/questions/createqservice/question-model.js" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/questions/createqservice/question-service.js" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" /> + <list default="true" id="f3a70bc3-1f0b-4042-a99e-e960a2b1db01" name="Changes" comment="resolución de problemas y modelo de preguntas"> + <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/questions/createqservice/question-service.js" beforeDir="false" afterPath="$PROJECT_DIR$/questions/createqservice/question-service.js" afterDir="false" /> </list> <option name="SHOW_DIALOG" value="false" /> <option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> <option name="LAST_RESOLUTION" value="IGNORE" /> </component> + <component name="FileTemplateManagerImpl"> + <option name="RECENT_TEMPLATES"> + <list> + <option value="JavaScript File" /> + </list> + </option> + </component> <component name="Git.Settings"> <option name="RECENT_BRANCH_BY_REPOSITORY"> <map> @@ -45,7 +46,7 @@ "keyToString": { "RunOnceActivity.OpenProjectViewOnStart": "true", "RunOnceActivity.ShowReadmeOnStart": "true", - "git-widget-placeholder": "Merging generacionPreguntas", + "git-widget-placeholder": "generacionPreguntasSara", "javascript.nodejs.core.library.configured.version": "20.11.1", "javascript.nodejs.core.library.typings.version": "20.11.20", "kotlin-language-version-configured": "true", @@ -72,10 +73,26 @@ <option name="presentableId" value="Default" /> <updated>1709024704264</updated> <workItem from="1709024705608" duration="479000" /> + <workItem from="1709226858104" duration="1475000" /> </task> <servers /> </component> <component name="TypeScriptGeneratedFilesManager"> <option name="version" value="3" /> </component> + <component name="Vcs.Log.Tabs.Properties"> + <option name="TAB_STATES"> + <map> + <entry key="MAIN"> + <value> + <State /> + </value> + </entry> + </map> + </option> + </component> + <component name="VcsManagerConfiguration"> + <MESSAGE value="resolución de problemas y modelo de preguntas" /> + <option name="LAST_COMMIT_MESSAGE" value="resolución de problemas y modelo de preguntas" /> + </component> </project> \ No newline at end of file diff --git a/questions/SPARQLQueryDispatcher.js b/questions/SPARQLQueryDispatcher.js new file mode 100644 index 00000000..41990bac --- /dev/null +++ b/questions/SPARQLQueryDispatcher.js @@ -0,0 +1,12 @@ +class SPARQLQueryDispatcher { + constructor( endpoint ) { + this.endpoint = endpoint; + } + + query( sparqlQuery ) { + const fullUrl = this.endpoint + '?query=' + encodeURIComponent( sparqlQuery ); + const headers = { 'Accept': 'application/sparql-results+json' }; + + return fetch( fullUrl, { headers } ).then( body => body.json() ); + } +} \ No newline at end of file diff --git a/questions/createqservice/question-service.js b/questions/createqservice/question-service.js index c4e0e876..ab3e329b 100644 --- a/questions/createqservice/question-service.js +++ b/questions/createqservice/question-service.js @@ -3,7 +3,9 @@ const express = require('express'); const mongoose = require('mongoose'); const bcrypt = require('bcrypt'); const bodyParser = require('body-parser'); -const User = require('./question-model') +const User = require('./question-model'); + +import SPARQLQueryDispatcher from '../SPARQLQueryDispatcher.js'; const app = express(); const port = 8001; @@ -16,35 +18,32 @@ const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; mongoose.connect(mongoUri); +const preguntas = new Map(); +setPreguntas(); -// Function to validate required fields in the request body -function validateRequiredFields(req, requiredFields) { - for (const field of requiredFields) { - if (!(field in req.body)) { - throw new Error(`Missing required field: ${field}`); - } - } -} +const endpointUrl = 'https://query.wikidata.org/sparql'; +const queryDispatcher = new SPARQLQueryDispatcher( endpointUrl ); -app.post('/adduser', async (req, res) => { +app.post('/question', async (req, res) => { try { - // Check if required fields are present in the request body - validateRequiredFields(req, ['username', 'password']); - - // Encrypt the password before saving it - const hashedPassword = await bcrypt.hash(req.body.password, 10); - - const newUser = new User({ - username: req.body.username, - password: hashedPassword, - }); - - await newUser.save(); - res.json(newUser); + getAtributo(); } catch (error) { res.status(400).json({ error: error.message }); }}); +function setPreguntas(){ + preguntas.set("capital","Cuál es la capital de"); +} + +function getAtributo(){ + const sparqlQuery = `SELECT ?capitalLabel WHERE { + ?capital wdt:P31 wd:Q6256; + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } +}`; + + queryDispatcher.query( sparqlQuery ).then( console.log ); +} + const server = app.listen(port, () => { console.log(`User Service listening at http://localhost:${port}`); }); From 765d4c00ed0acd6f8f23340cc7a6ce912c242431 Mon Sep 17 00:00:00 2001 From: sara <sarafergonza@gmail.com> Date: Thu, 29 Feb 2024 19:44:33 +0100 Subject: [PATCH 2/2] =?UTF-8?q?a=C3=B1adidos=20a=20sistema=20de=20pregunta?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 19 ++++++++++++++---- package-lock.json | 30 +++++++++++++---------------- webapp/src/components/GamesPanel.js | 15 ++++++++++++--- 3 files changed, 40 insertions(+), 24 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 57ce6308..f2ba0f90 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,9 +4,10 @@ <option name="autoReloadType" value="SELECTIVE" /> </component> <component name="ChangeListManager"> - <list default="true" id="f3a70bc3-1f0b-4042-a99e-e960a2b1db01" name="Changes" comment="resolución de problemas y modelo de preguntas"> + <list default="true" id="f3a70bc3-1f0b-4042-a99e-e960a2b1db01" name="Changes" comment="planteamiento sistema de preguntas"> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/questions/createqservice/question-service.js" beforeDir="false" afterPath="$PROJECT_DIR$/questions/createqservice/question-service.js" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/webapp/src/components/GamesPanel.js" beforeDir="false" afterPath="$PROJECT_DIR$/webapp/src/components/GamesPanel.js" afterDir="false" /> </list> <option name="SHOW_DIALOG" value="false" /> <option name="HIGHLIGHT_CONFLICTS" value="true" /> @@ -73,8 +74,17 @@ <option name="presentableId" value="Default" /> <updated>1709024704264</updated> <workItem from="1709024705608" duration="479000" /> - <workItem from="1709226858104" duration="1475000" /> + <workItem from="1709226858104" duration="5237000" /> </task> + <task id="LOCAL-00001" summary="planteamiento sistema de preguntas"> + <option name="closed" value="true" /> + <created>1709228469223</created> + <option name="number" value="00001" /> + <option name="presentableId" value="LOCAL-00001" /> + <option name="project" value="LOCAL" /> + <updated>1709228469223</updated> + </task> + <option name="localTasksCounter" value="2" /> <servers /> </component> <component name="TypeScriptGeneratedFilesManager"> @@ -93,6 +103,7 @@ </component> <component name="VcsManagerConfiguration"> <MESSAGE value="resolución de problemas y modelo de preguntas" /> - <option name="LAST_COMMIT_MESSAGE" value="resolución de problemas y modelo de preguntas" /> + <MESSAGE value="planteamiento sistema de preguntas" /> + <option name="LAST_COMMIT_MESSAGE" value="planteamiento sistema de preguntas" /> </component> </project> \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0a60377d..d8675a91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.0.tgz", - "integrity": "sha512-HOil5aFtme37dVQTB6M34G95kPM3MMuqSmIRVCC52eKV+Y/tGSqw9P3rWhlAx6A+mz+MoX+XxsGsNJbaI5qCgQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.2.tgz", + "integrity": "sha512-+Rnav+CaoTE5QJc4Jcwh5toUpnVLKYbpU6Ys0zqbakqbaLQHeglLVHPfxOiQqdNmUy5C2lXz5dwC6tQNX2JW2Q==", "engines": { "node": ">=14.0.0" } @@ -60,11 +60,11 @@ } }, "node_modules/react-router": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.0.tgz", - "integrity": "sha512-q2yemJeg6gw/YixRlRnVx6IRJWZD6fonnfZhN1JIOhV2iJCPeRNSH3V1ISwHf+JWcESzLC3BOLD1T07tmO5dmg==", + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.2.tgz", + "integrity": "sha512-YD3Dzprzpcq+tBMHBS822tCjnWD3iIZbTeSXMY9LPSG541EfoBGyZ3bS25KEnaZjLcmQpw2AVLkFyfgXY8uvcw==", "dependencies": { - "@remix-run/router": "1.15.0" + "@remix-run/router": "1.15.2" }, "engines": { "node": ">=14.0.0" @@ -74,12 +74,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.0.tgz", - "integrity": "sha512-z2w+M4tH5wlcLmH3BMMOMdrtrJ9T3oJJNsAlBJbwk+8Syxd5WFJ7J5dxMEW0/GEXD1BBis4uXRrNIz3mORr0ag==", + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.2.tgz", + "integrity": "sha512-WgqxD2qySEIBPZ3w0sHH+PUAiamDeszls9tzqMPBDA1YYVucTBXLU7+gtRfcSnhe92A3glPnvSxK2dhNoAVOIQ==", "dependencies": { - "@remix-run/router": "1.15.0", - "react-router": "6.22.0" + "@remix-run/router": "1.15.2", + "react-router": "6.22.2" }, "engines": { "node": ">=14.0.0" @@ -98,9 +98,5 @@ "loose-envify": "^1.1.0" } } - }, - "name": "ASW", - "lockfileVersion": 3, - "requires": true, - "packages": {} + } } diff --git a/webapp/src/components/GamesPanel.js b/webapp/src/components/GamesPanel.js index d24fed8a..d24d9253 100644 --- a/webapp/src/components/GamesPanel.js +++ b/webapp/src/components/GamesPanel.js @@ -1,13 +1,22 @@ import React from 'react'; import Grid from '@mui/material/Grid'; import Paper from '@mui/material/Paper'; -import Typography from '@mui/material/Typography'; +import {Typography, Button} from '@mui/material'; +import axios from 'axios'; function Game({ title }) { + const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; + const question = async () => { + const response = await axios.post(`${apiEndpoint}/question`); + }; + return ( <Grid item xs={4}> <Paper sx={{ p: 2, bgcolor: 'red' }}> <Typography variant="h6">{title}</Typography> + <Button variant="contained" color="primary" onClick={question}> + Question + </Button> </Paper> </Grid> ); @@ -17,8 +26,8 @@ function GamesPanel() { return ( <Grid container spacing={2}> <Game title="Saber y ganar" /> - <Game title="Elemento 2" /> - <Game title="Elemento 3" /> + <Game title=" " /> + <Game title=" " /> </Grid> ); }