Skip to content

Commit

Permalink
Merge branch 'newDevelop'
Browse files Browse the repository at this point in the history
  • Loading branch information
uo289432 committed Apr 30, 2024
2 parents 7d0e7ba + 6aa40d0 commit e6236f1
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 49 deletions.
4 changes: 2 additions & 2 deletions docs/src/01_introduction_and_goals.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ See https://docs.arc42.org/section-1/[Introduction and Goals] in the arc42 docum
****

* *Frontend Web Desplegado*: Habrá una interfaz web accesible vía navegador.
* *Registro de Usuarios y Consulta de Historial*: Usuarios podrán registrarse y ver su historial de participación.
* *Registro de Usuarios y Consulta de Estadísticas*: Usuarios podrán registrarse y ver sus estadísticas de participación.
* *Generación Automática de Preguntas desde Wikidata*: Las preguntas se generarán automáticamente usando datos de Wikidata.
* *Plazo de Tiempo para Responder*: Los usuarios tendrán un límite de tiempo para responder preguntas.
* *Respuestas Correctas e Incorrectas Automatizadas*: Cada pregunta tendrá una respuesta correcta y varias incorrectas, generadas automáticamente.
* *Acceso a Información de Usuarios vía API*: Otros sistemas podrán acceder a los datos de los usuarios a través de un API.
* *Acceso a Información de Preguntas vía API*: Otros sistemas podrán acceder a los detalles de las preguntas generadas mediante un API.

Mira los (https://docs.google.com/document/d/1pahOfYFY--Wi7_9bbxiKOGevB_9tOSyRm78blncgBKg/edit)[Requisitos de la práctica] para obtener más información.
Mira los https://docs.google.com/document/d/1pahOfYFY--Wi7_9bbxiKOGevB_9tOSyRm78blncgBKg/edit[Requisitos de la práctica] para obtener más información.


=== Metas de Calidad
Expand Down
2 changes: 1 addition & 1 deletion docs/src/02_architecture_constraints.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ a través de nuestro grupo de WhatsApp y en casos necesarios realizamos reunione
|Restricción |Explicación

|*Diseño del software*
|_Para lograr un buen diseño es indispensable que el código de la aplicación sea flexible, mantenible y comprensible. Además se espera un que sigamos los principios de "codigo limpio"
|_Para lograr un buen diseño es indispensable que el código de la aplicación sea flexible, mantenible y comprensible. Además se espera que sigamos los principios de "codigo limpio"
en cuanto a modularidad, limpieza, nombrado de métodos y variables._

|*Documentación*
Expand Down
6 changes: 3 additions & 3 deletions docs/src/03_system_scope_and_context.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -113,16 +113,16 @@ image::03_2_contexto_tecnico2.png["Diagrama de contexto técnico"]
|Biblioteca de Javascript para creación de interfaces de usuario, utilizado en el frontend.

|*Bootstrap*
|Biblioteca de código abierto que proporciona herramientas y estilos para el diseño de aplicaciones web y sitios responsivo. Podemos crear interfaces de usuario atractivas y funcionales de manera rápida y sencilla
|Biblioteca de código abierto que proporciona herramientas y estilos para el diseño de aplicaciones web y sitios responsivo. Podemos crear interfaces de usuario atractivas y funcionales de manera rápida y sencilla.

|*webapp*
|Módulo del sistema que se encarga de la interfaz del sistema.

|*questionservice*
|Módulo del sistema que se encarga de crear preguntas obteniendo tanto preguntas como respuestas correctas e incorrectas de la API Wikidata
|Módulo del sistema que se encarga de crear preguntas obteniendo tanto preguntas como respuestas correctas e incorrectas de la API Wikidata.

|*gateway*
|Módulo del sistema que funcina como puerta de enlace para coordinar el resto de modulos del sistema.
|Módulo del sistema que funciona como puerta de enlace para coordinar el resto de modulos del sistema.

|*userservice*
|Módulo del sistema que se encarga de tener los modelos y hacer las consultas para el almacenamiento correcto de los usuarios de la aplicación y del registro de partidas con la ayuda de nuestra base de datos MongoDB.
Expand Down
6 changes: 2 additions & 4 deletions docs/src/04_solution_strategy.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@ See https://docs.arc42.org/section-4/[Solution Strategy] in the arc42 documentat

* *Docker*: Utilizaremos esta plataforma para desplegar la aplicacion web, de manera que puedan realizarse pruebas aisladas de esta misma.

* *Mongo-DB*: Esta API nos servirá como sistema de autenticación del usuario para poder llevar un registro de su historial de partidas, así como algunas de sus estadísticas.
* *Mongo-DB*: Esta API nos servirá como sistema de autenticación del usuario para poder llevar un registro de sus estadísticas, así como algunas de sus estadísticas.

* *Microservicios:* Enfoque arquitectónico donde el software está compuesto por pequeños servicios independientes. Lo hemos elegido debido a la facilidad para modificar una parte de la aplicación sin afectar al resto.

* *MySQL:* Es una base de datos relacional ampliamente utilizada en proyectos debido a su fiabilidad, rendimiento y escalabilidad. Su estructura tabular facilita la organización de datos y su consulta a través de un lenguaje estándar (SQL).
* *Microservicios:* Enfoque arquitectónico donde el software está compuesto por pequeños servicios independientes. Lo hemos elegido debido a la facilidad para modificar una parte de la aplicación sin afectar al resto.
14 changes: 7 additions & 7 deletions docs/src/06_runtime_view.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -39,23 +39,23 @@ See https://docs.arc42.org/section-6/[Runtime View] in the arc42 documentation.

=== Inicio de Sesión

Al iniciar sesión en nuestra Web App, se presentará una interfaz solicitando al usuario que ingrese los datos necesarios para comenzar a jugar. Estos datos incluirán información de identificación única, como nombre de usuario y contraseña, así como posiblemente otros detalles relevantes para el perfil del jugador.
Al iniciar sesión en nuestra WebApp, se presentará una interfaz solicitando al usuario que ingrese los datos necesarios para comenzar a jugar. Estos datos incluirán información de identificación única, como nombre de usuario y contraseña, así como posiblemente otros detalles relevantes para el perfil del jugador.

Una vez que el usuario proporciona estos datos, la Web App los enviará al servicio userService a través de gatewayService, que actuará como el backend encargado de autenticar al usuario y gestionar su sesión. UserService verificará la validez de los datos proporcionados por el usuario y, si son correctos, emitirá un token de sesión único que identificará al usuario.
Una vez que el usuario proporciona estos datos, la WebApp los enviará al servicio userService a través de gatewayService, que actuará como el backend encargado de autenticar al usuario y gestionar su sesión. UserService verificará la validez de los datos proporcionados por el usuario y, si son correctos, emitirá un token de sesión único que identificará al usuario.

Este token de sesión se devolverá a la Web App, donde se utilizará para mantener la sesión del usuario durante su interacción con la plataforma de juego.
Este token de sesión se devolverá a la WebApp, donde se utilizará para mantener la sesión del usuario durante su interacción con la plataforma de juego.

Una vez que el proceso de inicio de sesión se completa con éxito, la Web App cambiará su interfaz para mostrar que ha iniciado sesión correctamente.
Una vez que el proceso de inicio de sesión se completa con éxito, la WebApp cambiará su interfaz para mostrar que ha iniciado sesión correctamente.

image::06_acceso3.png["Diagrama vista de tiempo de ejecución para el acceso"]

=== Interacción con Preguntas

Comenzaremos con la REST API que obtendrá las preguntas de Wikidata junto con sus opciones de respuestas correctas e incorrectas.
Comenzaremos con la API REST que obtendrá las preguntas de Wikidata junto con sus opciones de respuestas correctas e incorrectas.

Al obtener dicha información, QuestionService se la transmitirá a GatewayService que a su vez ira mostrando en Web App pregunta por pregunta junto con todas las opciones de respuesta disponibles al usuario, quien podrá seleccionar una única respuesta entre las opciones proporcionadas. Una vez que el usuario ha realizado su selección, la Web App verificará la precisión de la respuesta.
Al obtener dicha información, QuestionService se la transmitirá a GatewayService que a su vez ira mostrando en WebApp pregunta por pregunta junto con todas las opciones de respuesta disponibles al usuario, quien podrá seleccionar una única respuesta entre las opciones proporcionadas. Una vez que el usuario ha realizado su selección, la WebApp verificará la precisión de la respuesta.

Posteriormente, basándose en la respuesta proporcionada por el usuario, la Web App ofrecerá una retroalimentación visual clara que permitirá al usuario comprender si su respuesta fue correcta o incorrecta.
Posteriormente, basándose en la respuesta proporcionada por el usuario, la WebApp ofrecerá una retroalimentación visual clara que permitirá al usuario comprender si su respuesta fue correcta o incorrecta.

Por tanto, terminaremos con una retroalimentación visual por pantalla del resultado obtenido tras la respuesta del jugador.

Expand Down
19 changes: 11 additions & 8 deletions docs/src/07_deployment_view.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,16 @@ For multiple environments or alternative deployments please copy and adapt this

image::07_DiagramaDespliegue5.png["Diagrama de despliegue"]

****
Utilizamos como servidor en la nube Azure como infraestructura principal, dentro de ella tenemos desplegados cinco contenedores de Docker.
* UserService encargado de la gestión de usuarios, maneja autenticación, gestión de los perfiles, etc.
* WebApp donde reside la aplicación, con lo que interactúan los usuarios a traves de una interfaz de usuario en el navegador web.
* GatewayService es la puerta de enlace entre la aplicación y los servicios subyacentes.
* QuestionService encargado de obtener las preguntas de un servidor externo que en este caso es wikidata.
* MongoDB alberga la base de datos para almacenar usuarios y sus estadísticas.
* *UserService*: encargado de la gestión de usuarios, maneja autenticación, gestión de los perfiles, etc..
* *WebApp*: donde reside la aplicación, con lo que interactúan los usuarios a traves de una interfaz de usuario en el navegador web.
* *GatewayService*: es la puerta de enlace entre la aplicación y los servicios subyacentes.
* *QuestionService*: encargado de obtener las preguntas de un servidor externo que en este caso es Wikidata.
* *MongoDB*: alberga la base de datos para almacenar usuarios y sus estadísticas.
****


Mapeo de bloques de construcción a infraestructura::
Expand All @@ -81,11 +85,10 @@ Mapeo de bloques de construcción a infraestructura::
|Microservicio responsable de las vistas de la aplicación y sus interacciones con el usuario.

|*QuestionService*
|Microservicio responsable de generar preguntas y respuestas utilizando la información de Wikidata, almacenándola
posteriormente en una base de datos MySQL.
|Microservicio responsable de generar preguntas y respuestas utilizando la información de Wikidata.

|*UserService*
|Microservicio encargado de gestionar los diferentes usuarios y sus partidas realizadas haciendo uso de la API Firebase.
|Microservicio encargado de gestionar los diferentes usuarios y sus partidas realizadas.

|*Navegador Web*
|Programa sobre el que el cliente visualiza e interactúa con la aplicación web.
Expand Down
9 changes: 4 additions & 5 deletions docs/src/09_architecture_decisions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,10 @@ There you will find links and examples about ADR.
|*Angular, Vue...*

|*Base de Datos*
|_Donde almacenaremos la informacion de los usuarios._
|*MySQL*
|_Decidimos utilizarla porque es una base de datos relacional y para almacenar preguntas con sus respectivas respuestas no necesitamos una base de datos
no relacional con una complejidad excesiva._
|*MongoDB, Postgress, Redis, MariaDB, SQLLite...*
|_Donde almacenaremos la información de los usuarios._
|*MongoDB*
|_Decidimos utilizarla porque es una base de datos no relacional que se adapta bien a estructuras de datos flexibles como las que necesitamos para almacenar información de usuarios._
|*PostgreSQL, Redis, MariaDB, SQLite...*

|*Arquitectura*
|_La forma en la que se estructura la aplicación._
Expand Down
31 changes: 15 additions & 16 deletions docs/src/11_technical_risks.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -51,42 +51,41 @@ las planeadas para solucionar este tipo de problemas._
|Riesgo |Explicación

|*Caída de Servicios*
|_Nuestra aplicacion web puede verse comprometida a errores si alguno de los servicios utilizados, como por ejemplo Docker, parará de funcionar en algún momento.
Ya que los servicios no son creados por nosotros no podemos saber si estarán disponibles en todo momento por lo tanto
esto podría bloquear la entrega de alguna de las funcionalidades del proyecto._
| _Nuestra aplicacion web puede verse comprometida a errores si alguno de los servicios utilizados, como por ejemplo Docker, parara de funcionar en algún momento.
| Ya que los servicios no son creados por nosotros no podemos saber si estarán disponibles en todo momento por lo tanto
| esto podría bloquear la entrega de alguna de las funcionalidades del proyecto._

|*Problemas Software*
|_No podemos asegurar que nuestra aplicación pueda ser utilizada por todos los usuarios ya que en ciertos casos dependerá del sistema operativo de cada usuario._
| *Problemas Software*
| _No podemos asegurar que nuestra aplicación pueda ser utilizada por todos los usuarios ya que en ciertos casos dependerá del sistema operativo de cada usuario._

|*Problemas Hardware*
|_Dependiendo desde el dispositivo que se acceda a la aplicación si este no cumple los requisitos, como la resolución de pantalla, puede ser que la aplicacion no se vea de la forma esperada._
| *Problemas Hardware*
| _Dependiendo desde el dispositivo que se acceda a la aplicación si este no cumple los requisitos, como la resolución de pantalla, puede ser que la aplicacion no se vea de la forma esperada._

|===

=== Deudas Técnicas

TODO=== Deudas técnicas

[cols="e,2e" options="header"]
|===

| Descripción | Consideraciones

| Pruebas E2E
| Se han impletado pruebas e2e pero finalmente solo hemos sido capaces de sacar una adelante con exito. Por falta de tiempo no hemos encontrado los errores en las pruebas por lo que nos hemos visto obligados a eliminarlas
| *Pruebas E2E*
| _Se han impletado pruebas e2e pero finalmente solo hemos sido capaces de sacar una adelante con exito. Por falta de tiempo no hemos encontrado los errores en las pruebas por lo que nos hemos visto obligados a eliminarlas._

| *Botón finalizar partida*
| Después de finalizar la partida, añadimos un botón con la intención de que al pulsarlo guardara las estadísticas y nos redirigiera a la página principal. Sin embargo, al no lograr que con esta implementación nos pasase los test, optamos por modificarlo para que solo guarde las estadísticas y muestre un mensaje al jugador actual, dándole la opción de elegir qué desea hacer a continuación. Podria dar confusión a los usuarios ya que se puede dar el caso que no sepan como seguir la partida.
| _Después de finalizar la partida, añadimos un botón con la intención de que al pulsarlo guardara las estadísticas y nos redirigiera a la página principal. Sin embargo, al no lograr que con esta implementación nos pasase los test,
| optamos por modificarlo para que muestre la opción de elegir si desea guardar las estadísticas y, en dicho caso, muestre un mensaje. Podria dar confusión a los usuarios ya que se puede dar el caso que no sepan como jugar otra partida._

| *Mostrar tiempo de respuesta*
| Hemos intentado incorporar el tiempo de respuesta al finalizar la partida en las estadísticas de cada jugador, pero lamentablemente no hemos podido lograrlo. Esta funcionalidad habría sido beneficiosa para mejorar el apartado de las estadísticas de nuestra aplicación.
| _Hemos intentado incorporar como estadísitica el tiempo de respuesta medio de las preguntas, pero lamentablemente no hemos podido lograrlo debido a que optamos por centrarnos en arreglar problemas del proyecto. Esta funcionalidad habría sido beneficiosa para mejorar el apartado de las estadísticas de nuestra aplicación._

| *Requisitos opcionales*
| No hemos abordado los requisitos opcionales porque nuestra atención ha estado centrada en desarrollar la parte fundamental de la aplicación y asegurarnos de que funcione correctamente.
| _No hemos abordado los requisitos opcionales porque nuestra atención ha estado centrada en desarrollar la parte fundamental de la aplicación y asegurarnos de que funcione correctamente._

| *Internacionalización de la web*
| Inicialmente, nuestra aplicación estará disponible solo en español. Una vez que hayamos asegurado que todas las funcionalidades están correctamente implementadas, daremos el paso de internacionalizarla. Esto nos permitirá hacerla accesible para usuarios que no hablen español como lengua principal
| _Inicialmente, valoramos adaptar la aplicación a otros idiomas como el inglés pero finalmente no se llevo a cabo. Esto hace que la aplicación sea menos accesible para aquellos usuarios que no tengan el español como lengua principal._

| *Limpieza y organización de código*
| Nuestro código podría tener áreas que podrían mejorarse, ya que no se han desarrollado de la manera más eficiente posible. Una estructura más organizada podría facilitar la localización de elementos y la inclusión de comentarios adicionales podría mejorar la comprensión. Esta situación hace que sea complicado mantener, ampliar y depurar el código. Por lo tanto, es crucial realizar revisiones regulares del código, refactorizaciones y actualizaciones de la documentación para garantizar la calidad y la facilidad de mantenimiento del código del proyecto.
| _Nuestro código podría tener áreas que podrían mejorarse, ya que no se han desarrollado de la manera más eficiente posible. Una estructura más organizada podría facilitar la localización de elementos y la inclusión de comentarios adicionales podría mejorar la comprensión. Esta situación hace que sea complicado mantener, ampliar y depurar el código. Por lo tanto, es crucial realizar revisiones regulares del código, refactorizaciones y actualizaciones de la documentación para garantizar la calidad y la facilidad de mantenimiento del código del proyecto._
|===
6 changes: 3 additions & 3 deletions docs/src/12_glossary.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ See https://docs.arc42.org/section-12/[Glossary] in the arc42 documentation.
|*Docker*
|Plataforma de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software.

|*MySQL*
|Es el sistema de gestión de bases de datos relacionales de código abierto más popular del mundo.
MySQL es utilizado por muchas de las aplicaciones más accedidas, incluyendo Facebook, Twitter, Netflix, Uber, Airbnb, Shopify y Booking.com.
|*MongoDB*
|Es un sistema de gestión de bases de datos NoSQL de código abierto que permite el almacenamiento de datos de forma flexible y escalable. MongoDB es ampliamente utilizado en diversas aplicaciones,
|ofreciendo una estructura de datos dinámica que se adapta bien a casos de uso donde se requiere una manipulación ágil de la información.

|*Saber y Ganar*
|Programa televisión española de tipo concurso de preguntas y respuestas culturales.
Expand Down

0 comments on commit e6236f1

Please sign in to comment.