Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fernando prueba #72

Closed
wants to merge 14 commits into from
Closed
68 changes: 67 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,84 @@
version: '3'
services:
mongodb:
container_name: mongodb-${teamname:-defaultASW}
image: mongo
profiles: ["dev", "prod"]
volumes:
- mongodb_data:/data/db
ports:
- "27017:27017"
networks:
- mynetwork

questionservice:
container_name: questionservice-${teamname:-defaultASW}
image: ghcr.io/arquisoft/wiq_es05a/questionservice:latest
profiles: ["dev", "prod"]
build: ./questionservice
ports:
- "2500:2500"
- "8003:8003"
environment:
- ACCESS_CONTROL_ALLOW_ORIGIN=http://webapp:3000
- ACCESS_CONTROL_ALLOW_ORIGIN=http://localhost:3000/game
networks:
- mynetwork

authservice:
container_name: authservice-${teamname:-defaultASW}
image: ghcr.io/arquisoft/wiq_0/authservice:latest
profiles: ["dev", "prod"]
build: ./userservice/authservice
depends_on:
- mongodb
ports:
- "8002:8002"
networks:
- mynetwork
environment:
MONGODB_URI: mongodb://mongodb:27017/userdb

userservice:
container_name: userservice-${teamname:-defaultASW}
image: ghcr.io/arquisoft/wiq_0/userservice:latest
profiles: ["dev", "prod"]
build: ./userservice/userservice
depends_on:
- mongodb
ports:
- "8001:8001"
networks:
- mynetwork
environment:
MONGODB_URI: mongodb://mongodb:27017/userdb

gatewayservice:
container_name: gatewayservice-${teamname:-defaultASW}
image: ghcr.io/arquisoft/wiq_0/gatewayservice:latest
profiles: ["dev", "prod"]
build: ./gatewayservice
depends_on:
- mongodb
- userservice
- authservice
- questionservice
ports:
- "8000:8000"
networks:
- mynetwork
environment:
AUTH_SERVICE_URL: http://authservice:8002
USER_SERVICE_URL: http://userservice:8001
QUESTION_SERVICE_URL: http://questionservice:8001


webapp:
container_name: webapp-${teamname:-defaultASW}
image: ghcr.io/arquisoft/wiq_es05a/webapp:latest
profiles: ["dev", "prod"]
build: ./webapp
depends_on:
- gatewayservice
ports:
- "3000:3000"

Expand Down
Binary file modified docs/images/05_nivel_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/05_sistema-general-caja-blanca.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/images/06_acceso.png
Binary file not shown.
Binary file added docs/images/06_acceso2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/images/06_pregunta.png
Binary file not shown.
Binary file added docs/images/06_pregunta2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 6 additions & 6 deletions docs/src/01_introduction_and_goals.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ A table with quality goals and concrete scenarios, ordered by priorities
[cols="e,2e" options="header"]
|===
|Nombre|Descripción
|*Usabilidad*| _La aplicación tiene que poder usarse por el mayor tipo de usuarios_
|*Usabilidad*| _La aplicación tiene que poder usarse por el mayor tipo de usuarios, promoviendo una experiencia intuitiva y accesible desde el primer contacto. Además, a medida que los usuarios interactúan más con la aplicación, esta se vuelva más fácil de usar._
|*Rendimiento*| _El tiempo de respuesta de la aplicación debe ser rápido_
|*Testeable*| _La aplicación debe pasar las pruebas generadas automaticamente para cada versión_
|*Testeable*| _Las pruebas deben ser capaces de detectar errores de manera rápida y precisa, fáciles de mantener y actualizar a medida que el código base cambia. Esto implica que las pruebas estén bien estructuradas y documentadas._
|*Disponibilidad*| _La aplicación debe estar disponible y caerse lo menos posible_
|===
=== Stakeholders
Expand Down Expand Up @@ -110,10 +110,10 @@ Table with role names, person names, and their expectations with respect to the
[cols="e,2e,2e" options="header"]
|===
|Rol/Nombre|Expectativa|Descripción
| *Cristian Augusto* | _Aplicar correctamente los conocimientos y competencias adquiridos en la asignatura Arquitectura del Software_ | _Profesor de la asignatura_
| *Profesor* | _Aplicar correctamente los conocimientos y competencias adquiridos en la asignatura Arquitectura del Software_ | _Profesor de la asignatura_
| *HappySw* | _Una aplicación buena para atraer al mayor número de usuarios_ | _Equipo de desarrollo_
| *Wikidata* | _Usar su aplicacion con precaución, sin sobrecargar sus servicios_ | _Empresa que nos facilita la API para obtener información_
| *Usuarios Registrados* | _Una aplicación que proporcione los servicios esperados_ | _Los usuarios de la aplicación_
| *Usuarios No Registrados* | _Una buena aplicación_ | _Los usuarios de la aplicación_
| *RTVE* | _Una buena versión de su juego "Saber y Ganar"_ | _Dueño del producto_
| *Usuarios Registrados* | _Poder jugar en la aplicación que recrea el juego sin tener que participar en el programa._ | _Usuarios que ya han jugado anteriormente_
| *Usuarios No Registrados* | _Poder registrarse lo más rápido posible para empezar a jugar al juego de preguntas y respuestas_ | _Usuarios que nunca jugaron antes_
| *RTVE* | _Versión mejorada de "Saber y Ganar" para ganar mayor audiencia e interés social._ | _Dueño del producto_
|===
34 changes: 23 additions & 11 deletions docs/src/02_architecture_constraints.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,15 @@ Por ello esta aplicación está desarrollada siguiendo una serie de limitaciones
|Restricción |Explicación

|*GIT*
|_En la asignatura se requiere el uso del sistema de control de versiones GIT, además de emplear GitHub como repositorio. Además nos permite
una continua integración mediante la paralelización del trabajo usando el sistema de ramas. También GitHub permite organizar las distintas tareas de cada
miembro del equipo mediante el uso de las Issues._
|_En la asignatura se requiere el uso del sistema de control de versiones GIT, además de emplear GitHub como repositorio. Asimismo, nos permite
una continua integración de forma remota mediante la paralelización del trabajo usando el sistema de ramas._

|*Docker*
|_Esta tecnología de contenerización es utilizada para desplegar la aplicación web tanto en el entorno de desarrollo como en el de producción
|_Esta tecnología de contenerización será requerida ya que la usaremos para desplegar la aplicación web tanto en el entorno de desarrollo como en el de producción
y realizar las pruebas pertinentes._

|*Wikidata*
|_Fuente de información utilizada para generar aleatoriamente tanto las preguntas como las respuestas correctas e incorrectas del juego._
|_En la asignatura se requiere que esta sea la fuente de información principal para generar aleatoriamente tanto las preguntas como las respuestas correctas e incorrectas del juego._
|===

=== Limitaciones organizativas
Expand All @@ -66,6 +65,19 @@ con alguna de estas._
|*Reuniones*
|_Para mantener un buen ritmo de trabajo a través de una correcta organización se realizan reuniones semanales en las clases prácticas de la asignatura. Además, mantenemos contacto
a través de nuestro grupo de WhatsApp y en casos necesarios realizamos reuniones extraordinarias utilizando nuestro servidor de Discord._

|*Issues*
|_Para el seguimiento y la gestión de las tareas, problemas, mejoras, autoinformes, etc. de la aplicación tendremos que usar las issues ofrecidas por github; esto es una obligación ya
que reflejara el trabajo realizado por cada miembro del equipo al poder asignarse cada issue._

|*Actas*
|_Al igual que las issues, las actas servirán para la organización de las tareas asi como para la toma de decisiones, y tendrán
que reflejar el trabajo repartido a cada miembro. Se deberán realizar obligatoriamente cada vez que se realice una reunión y deberán constar los miembros del
equipo que han participado._

|*Decisiones arquitectónicas*
|_Las decisiones arquitectónicas pueden ser una limitación organizativa al definir la estructura básica de un sistema de software, lo que podría obstaculizar la capacidad de realizar cambios y adaptarse a nuevas necesidades y tecnologías._

|===

=== Convenciones
Expand All @@ -75,19 +87,19 @@ 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._
|_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 código limpio ('clean code'),
es decir, que sea fácil de entender, mantener y modificar, y que garantize la claridad, simplicidad y legibilidad._

|*Documentación*
|_Para crearla usaremos la plantilla Arc42 con la finalidad de que sea sencilla y práctica._

|*Accesibilidad*
|_Intentaremos que nuestra aplicación puede ser utilizada por cualquier tipo de usuario, sin importar quién sea. Seguiremos el estándard WCAG de la W3C,
usando el color, tamaño de texto... adecuados para ello._
|_Nos esforzaremos para que nuestra aplicación sea accesible para todos los usuarios, independientemente de su perfil o características individuales._

|*Estructura*
|_Debe seguir una estructura fija y bajo los mismos estandares. Los diferentes modulos estarán separados en carpetas
principalmente: 'users' para la api rest y el registro de usuarios, 'webapp' para el desarrollo de la aplicación, 'docs'
para la documentación._
|_Debe seguir una estructura de paquetes fija y bajo los mismos estandares. Los diferentes modulos estarán separados en carpetas: 'userservice' para la gestión de
usuarios (registro y autentificación), 'questionservice' para la comunicación con wikidata y 'webapp' para el desarrollo de la aplicación. Todos estos
servicios estarán comunicados por 'gatewayservice'._

|*Convenciones del lenguaje de programación*
|_Es fundamental adherirse a las convenciones de los diferentes lenguajes de programación utilizados para garantizar que la aplicación tenga un código legible,
Expand Down
21 changes: 16 additions & 5 deletions docs/src/05_building_block_view.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,6 @@ Bloques de construcción contenidos::
|*Wikidata*
|_Servicio externo desde donde obtenemos los datos para generar las preguntas._

|*Firebase*
|_Plataforma para el manejo de sesiones de los usuarios, asi como informacion sobre sus estadisticas._
|===

=== Nivel 2: WIQ
Expand All @@ -102,11 +100,24 @@ Bloques de construcción contenidos::
|===
|Nombre |Responsabilidad

|*Webapp*
|*webapp*
|_La interfaz con la que interactua el usuario._

|*REST*
|_Manejo de datos de Wikidata._
|*gatewayservice*
|_Servicio de puerta de enlace que actúa como intermediario entre los clientes y otros servicios,
reenviando las solicitudes a los servicios correspondientes y devolviendo las respuestas al cliente._

|*authservice*
|_Servicio de autenticación de usuarios._

|*userservice*
|_Servicio para registro de usuarios._

|*questionservice*
|_Servicio para el manejo de datos de Wikidata._

|*Wikidata*
|_Servicio externo desde donde obtenemos los datos para generar las preguntas._

|===

Expand Down
23 changes: 14 additions & 9 deletions docs/src/06_runtime_view.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -39,21 +39,26 @@ See https://docs.arc42.org/section-6/[Runtime View] in the arc42 documentation.

=== Inicio de Sesión

A la hora de iniciar sesión nuestra web App nos mostrara la ventana pidiendo los datos necesarios para poder empezar a jugar.
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.

Se le piden una serie de datos al usuario que serán posteriormente pasados a Firebase encargado de controlar estos datos y devolverle a web App el ID del usuario que estará jugando.
Una vez que el usuario proporciona estos datos, la Web App los enviará al servicio userService, 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 usario a completado el inicio de sesión de forma exitosa nuestra web App pasará a mostrar la pantalla de inicio del juego.
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.

image::06_acceso.png["Diagrama vista de tiempo de ejecución para el acceso"]
Una vez que el proceso de inicio de sesión se completa con éxito, la Web App cambiará su interfaz para mostrar la pantalla de inicio del juego, donde el usuario podrá acceder a las diferentes opciones de juego y comenzar a participar en las actividades disponibles.

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

=== Interacción con Preguntas

Rest que tiene nuestra base de datos será el encargado de obtener la pregunta con sus respuestas correctas e incorrectas y pasarsela a web App
Comenzaremos con la REST API que se integra con nuestra base de datos y se encargará de la obtención de la pregunta junto con sus opciones de respuestas correctas e incorrectas, proporcionando así la información necesaria para la Web App.

Al obtener dicha información, la Web App mostrará la 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.

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.

Web App comenzara mostrando por pantalla la pregunta con todas las respuestas disponibles, a lo que el usuario solo podrá escoger una respuesta de todas las posibles.
Una vez el usuario elige la respuesta se comprobará si los resultados son correctos o errones.
Por tanto, terminaremos con una retroalimentación visual por pantalla del resultado obtenido tras la respuesta del jugador.

En base a la respuesta del usuario web App mostrara si ha acertado o fallado de forma visual que lo pueda entender el usuario.
Este flujo de interacción garantiza una experiencia de usuario fluida y comprensible, optimizando así la participación y el compromiso del usuario con la plataforma.

image::06_pregunta.png["Diagrama vista de tiempo de ejecución para la pregunta"]
image::06_pregunta2.png["Diagrama vista de tiempo de ejecución para la pregunta"]
4 changes: 2 additions & 2 deletions docs/src/07_deployment_view.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,11 @@ Mapeo de bloques de construcción a infraestructura::
|*WebApp*
|Microservicio responsable de las vistas de la aplicación y sus interacciones con el usuario.

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

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

|*Navegador Web*
Expand Down
16 changes: 13 additions & 3 deletions docs/src/11_technical_risks.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ See https://docs.arc42.org/section-11/[Risks and Technical Debt] in the arc42 do
****

=== Riesgos Técnicos
==== Riesgos internos

[cols="e,2e" options="header"]
|===
Expand All @@ -37,10 +38,18 @@ de trabajo de los demás compañeros._
|_Las demás asignaturas en la que están matriculados los miembros del equipo puede exigir una carga importante de trabajo por lo que provocar que el equipo no dedique el
suficiente tiempo al desarrollo de este proyecto._

|*Errores*
|_Durante las pruebas de la aplicación pueden surgir errores que nos obliguen a realizar importantes cambios en esta. Esto puede provocar que el equipo invierta más horas de
|*Errores de diseño*
|_Los errores que surjan debido al diseño, implementacion o gestion interna del proyecto; nos obligarán a realizar cambios e invertir más horas de
las planeadas para solucionar este tipo de problemas._

|===

==== Riesgos externos

[cols="e,2e" options="header"]
|===
|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
Expand All @@ -54,5 +63,6 @@ esto podría bloquear la entrega de alguna de las funcionalidades del proyecto._

|===

=== Deudas Técnicas


TODO
10 changes: 10 additions & 0 deletions gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const port = 8000;

const authServiceUrl = process.env.AUTH_SERVICE_URL || 'http://localhost:8002';
const userServiceUrl = process.env.USER_SERVICE_URL || 'http://localhost:8001';
const questionServiceUrl = process.env.QUESTION_SERVICE_URL || 'http://localhost:8003';

app.use(cors());
app.use(express.json());
Expand Down Expand Up @@ -41,6 +42,15 @@ app.post('/adduser', async (req, res) => {
}
});

app.get('/pregunta', async (req, res) => {
try{
const questionResponse = await axios.get(questionServiceUrl+'/pregunta')
res.json(questionResponse.data);
}catch(error){
res.status(error.response.status).json({error: error.response.data.error});
}
});

// Start the gateway service
const server = app.listen(port, () => {
console.log(`Gateway Service listening at http://localhost:${port}`);
Expand Down
Loading