Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1.1.3. Descripción
Trivia Tour, un juego interactivo de preguntas y respuestas, donde
jugadores contestarán preguntas de cultura general acerca de países,
continentes, mares, sucesos importantes y curiosidades del mundo. Las
preguntas estarán clasificadas por diferentes temáticas, el usuario podrá
escoger sobre cuál o cuáles temáticas desea jugar. Las preguntas serán
elegidas aleatoriamente por el juego cuando se le presenten al usuario y
permitirán a varios usuarios competir entre sí. Los usuarios podrán publicar
preguntas para que los demás participantes tengan la oportunidad de
contestarlas. Las preguntas se pueden realizar por medio de texto o
multimedia (imagen, audio y/o video).
1.1.4. Prototipo: #6
1.2. Equipo
1.2.1. Nombre: 1B
1.2.2. Integrantes
● Gustavo Gálvez Bello
● Miguel Alfredo Medellín Ráquira
● Oscar Fabian Mendez
● Brayan Alexander Riascos Ruiz
● Juan David Solano Salazar
● Edinson Vega Barrera
1.2.3. Lista de Arquitectos Líderes
No. Prototipo Arquitecto
2.1.2. Representación en Cajas
2.1.3. Representación en Sarch
architecture {
software_system: triviatour;
author: sa_team_1b;
architectural_views {
decomposition_view::
elements {
module configuracionDelSistema;
module trivia;
submodule acceso;
submodule perfil;
submodule amigos;
submodule juego;
submodule preguntas;
submodule versus;
functionality registro;
functionality iniciarSesion;
functionality informacionPerfil;
functionality cambiarContrasena;
functionality cambiarCorreo;
functionality puntajeJugador;
functionality nivelJugador;
functionality agregarAmigo;
functionality eliminarAmigo;
functionality verAmigos;
functionality mapaDelMundo;
functionality escogerPais;
functionality responderTrivia;
functionality resultadoTrivia;
functionality historialTrivias;
functionality crearPregunta;
functionality agregarOpcionesRespuesta;
functionality calificarPregunta;
functionality agregarMultimediaOpcionesRespuesta;
functionality establecerOpcionRespuestaCorrecta;
functionality escogerCategoriaDePregunta;
functionality iniciarVersus;
functionality aceptarVersus;
functionality resultadoVersus;
functionality historialVersus;
}
relations {
sm: acceso is_part_of m: configuracionDelSistema;
sm: amigos is_part_of m: configuracionDelSistema;
sm: perfil is_part_of m: configuracionDelSistema;
sm: juego is_part_of m: trivia;
sm: preguntas is_part_of m: trivia;
sm: versus is_part_of m: trivia;
f: registro is_part_of sm: acceso;
f: iniciarSesion is_part_of sm: acceso;
f: cambiarContrasena is_part_of sm: acceso;
f: cambiarCorreo is_part_of sm: acceso;
f: informacionPerfil is_part_of sm: perfil;
f: puntajeJugador is_part_of sm: perfil;
f: nivelJugador is_part_of sm: perfil;
f: agregarAmigo is_part_of sm: amigos;
f: verAmigos is_part_of sm: amigos;
f: eliminarAmigo is_part_of sm: amigos;
f: mapaDelMundo is_part_of sm: juego;
f: escogerPais is_part_of sm: juego;
f: responderTrivia is_part_of sm: juego;
f: resultadoTrivia is_part_of sm: juego;
f: historialTrivias is_part_of sm: juego;
f: crearPregunta is_part_of sm: preguntas;
f: agregarOpcionesRespuesta is_part_of sm: preguntas;
f: calificarPregunta is_part_of sm: preguntas;
f: agregarMultimediaOpcionesRespuesta is_part_of sm: preguntas;
f: establecerOpcionRespuestaCorrecta is_part_of sm: preguntas;
f: escogerCategoriaDePregunta is_part_of sm: preguntas;
f: iniciarVersus is_part_of sm: versus;
f: aceptarVersus is_part_of sm: versus;
f: resultadoVersus is_part_of sm: versus;
f: historialVersus is_part_of sm: versus;
}
::
2.1.4. Descripción de la Vista
Trivia Tour
Módulo Configuración del Sistema Componentes
Submódulo Amigos
Submódulo Versus
Componentes
Funcionalidad Registro
Registra el usuario en el sistema de software
2.2.2. Representación en Sarch
data_model_view::
data_entity attempt {
attributes {
string _id;
time created_at;
time updated_at;
}
}
data_entity user {
attributes {
int id;
}
}
data_entity question_trivia {
attributes {
int id;
}
}
data_entity question_attempt {
attributes {
int id;
bool isRight;
}
}
data_entity country {
attributes {
int code;
string name;
string alpha2Code;
string alpha3Code;
time created_at;
time updated_at;
}
}
}
relations {
composition(trivia, question_trivia);
composition(trivia, attempt);
aggregation(trivia, country);
composition(trivia, user);
composition(attempt, user);
composition(attempt, question_attempt);
}
}
data_entity answer {
attributes {
int id_answer;
string content;
string content_type;
bool is_right;
time created_at;
time updated_at;
}
}
data_entity category {
attributes {
int id_category;
string name;
time created_at;
time updated_at;
}
}
}
relations {
one_to_many(question, answer);
one_to_many(category, question);
}
}
relational data_model data_model_versus {
elements {
data_entity versus {
attributes {
int id_versus;
string id_trivia;
string challenger_attempt;
string defensor_attempt;
int challenging_player;
int defending_player;
int challenging_score;
int defending_score;
string status;
time created_at;
time updated_at;
}
}
}
}
::
2.2.3. Descripción de la Vista
Trivia Tour
Base de datos en mongoDB que almacena las credenciales de los usuarios del
sistema de software
Base de datos en Mysql que almacena la lista de amigos de los usuarios del
sistema de software
Base de datos en mongoDB que almacena los registros de las trivias jugadas
por los usuarios y la lista de países del mundo
es un
componente de Trivia
Trivia
de uno por
User
usuario
Question_
Entidad de Datos Relación Entidad de Datos
Attempt
Base de datos en MySQL que almacena las preguntas junto con sus opciones de
respuesta para las trivias
de uno Category
de uno Country
de muchos Trivia
de uno Trivia
2.3.2. Representación en Sarch
component_and_connector_view ::
elements {
programming_languages {
go;
python;
ruby;
javascript;
kotlin;
c_char;
}
db_systems {
mysql;
postgresql;
mongodb;
}
component_types {
database;
microservice;
ldap;
cloud_firebase;
api_gateway;
proxy;
interface;
web_application;
mobile_application;
}
relations {
attachment(mongodb_connector: triviatour_access_ms, triviatour_access_db);
attachment(mysql_connector: triviatour_friends_ms, triviatour_friends_db);
attachment(mongodb_connector: triviatour_game_ms, triviatour_game_db);
attachment(mysql_connector: triviatour_profiles_ms, triviatour_profiles_db);
attachment(mysql_connector: triviatour_questions_ms, triviatour_questions_db);
attachment(posgresql_connector: triviatour_versus_ms, triviatour_versus_db);
2.3.3. Descripción de la Vista
Trivia Tour
Componente Conector Componente
graphql
Conector graphql
triviatour-proxy
entre el proxy inverso
Proxy inverso del Sistema triviatour-api-gateway
y el API Gateway del
de Software.
Sistema de Software
triviatour-interface
Interfaz del Sistema de
software desarrollado con
el lenguaje de
graphql
programación JavaScript
Conector graphql
usando el entorno de
entre el API Gateway y
triviatour-api-gateway ejecución NodeJS que
la interfaz del Sistema
API Gateway desarrollado maneja la información de
de Software
con el lenguaje de los países expuestos por el
programación JavaScript protocolo SOAP para el uso
usando el entorno de de otro Sistema de
tiempo de ejecución Software.
NodeJS implementado el
triviatour-access-ms
lenguaje de consulta el
lenguaje de manipulación y triviatour-friends-ms
consulta GraphQL. REST
Conector de tipo REST triviatour-game-ms
entre el API Gateway y triviatour-profiles-ms
los microservicios
triviatour-questions-ms
triviatour-versus-ms
triviatour-ldap ldap
Directorio de usuarios Protocolo ligero de
registrados en el Sistema acceso a directorios triviatour-access-ms
de Software implementado
con OpenLDAP
component_and_connector_view ::
elements {
programming_languages {
go;
python;
ruby;
javascript;
kotlin;
c_char;
}
db_systems {
mysql;
postgresql;
mongodb;
}
component_types {
database;
microservice;
ldap;
bass;
api_gateway;
proxy;
interface;
web_application;
mobile_application;
external_system;
connector mysql_connector;
connector nosql_connector;
connector rest;
connector ldap;
connector graphql;
connector http;
connector mongodb_connector;
connector posgresql_connector;
connector soap;
}
relations {
attachment(mongodb_connector: triviatour_access_ms, triviatour_access_db);
attachment(mysql_connector: triviatour_friends_ms, triviatour_friends_db);
attachment(mongodb_connector: triviatour_game_ms, triviatour_game_db);
attachment(mysql_connector: triviatour_profiles_ms, triviatour_profiles_db);
attachment(mysql_connector: triviatour_questions_ms, triviatour_questions_db);
attachment(posgresql_connector: triviatour_versus_ms, triviatour_versus_db);
}
::
2.4.3. Descripción de la Vista
Trivia Tour
Descripción de elementos y contenencia
Capa Contenencia Capa
Presentación triviatour-wa
Capa encargada de mostrar la parte Contiene
visual(Front-end) de la aplicación. triviatour-ma
triviatour-wa router
Capa encargada de mostrar la parte
visual(Front-end) de la aplicación Web. Contiene view
components
triviatour-ma activities
Capa encargada de mostrar la parte
visual(Front-end) de la aplicación Móvil. adapters
Contiene models
graphql
layout
router
Capa donde se encuentran las rutas. -
view
-
Capa donde se encuentran las vistas.
components
Capa donde encuentra la lógica del -
front-end.
activities
Capa encargada de la lógica de las vistas -
de la aplicación móvil.
graphql
Capa que permite la conexión de la
aplicación móvil.
-
models
Capa que se encuentra la conexión con
-
graphql.
layout
Capa que presenta la vistas finales al -
usuario en la aplicación móvil.
adapter
Capa encargada de fragmentos de vistas -
de la aplicación móvil
Logic triviatour_proxy
Capa encargada de toda la parte
funcional(Back-end) de la aplicación. En triviatour_api_gateway
ella se encuentran los microservicios.
triviatour_access_ms
triviatour_friends_ms
Contiene
triviatour_versus_ms
triviatour_game_ms
triviatour_questions_ms
triviatour_profiles_ms
triviatour_proxy
Capa de seguridad que recupera los -
recursos solicitados
triviatour-api-gateway
Capa del API Gateway desarrollado con
el lenguaje de programación JavaScript microservices
usando el entorno de tiempo de Contiene
ejecución NodeJS implementado el server addresses
lenguaje de consulta el lenguaje de
manipulación y consulta GraphQL.
triviatour_access_ms
Capa donde se encuentra el
microservicio desarrollado con el routers
lenguaje de programación Javascript,
usando el entorno de tiempo de Contiene controllers
ejecución NodeJS, m
aneja autenticación
y registro en el sistema de software. entities
triviatour-friends-ms router
Capa donde se encuentra el
microservicio desarrollado con el controllers
lenguaje de programación Go, maneja las Contiene
solicitudes de amistad y la lista de repository
amigos.
models
triviatour-profiles-ms
connectors
Capa donde se encuentra el
microservicio desarrollado con el
Contiene controllers
lenguaje de programación C# usando el
framework de desarrollo .NET core,
models
maneja las estadísticas base del jugador.
triviatour-questions-ms
Capa donde se encuentra el
microservicio desarrollado con el controllers
lenguaje de programación Ruby u sando Contiene
el framework de desarrollo Ruby on Rails, models
maneja la creación de preguntas junto
con sus opciones de respuesta.
triviatour-game-ms
Capa donde se encuentra el
routers
microservicio desarrollado con el
lenguaje de programación JavaScript
Contiene controllers
usando el entorno de tiempo de
ejecución NodeJS, maneja el juego de
entities
trivia (crear y responder trivias), historial
de partidas y lista de países.
triviatour-versus-ms
Capa donde se encuentra el
urls
microservicio desarrollado con el
lenguaje de programación Python
views
usando el framework de desarrollo
Contiene
Django, maneja los retos entre los
serializers
jugadores.
models
microservices
Capa donde se encuentra la clasificación schema
de schemas y resolver para cada Contiene
microservicio resolver
server addresses
-
Capa de las direcciones de los servidores
schema
Capa donde se encuentran las -
estructuras de los microservicios.
resolver
Capa donde se encuentran las funciones -
que se ejecutan de acuerdo al schema.
routers
-
Capa donde encuentran las rutas.
controllers
Capa donde se encuentra la lógica de
cada función.
entities
Capa de abstracción del modelo de -
datos.
repository
Capa donde encuentran funciones de -
conexión al modelo.
connectors
-
Capa donde se encuentran las rutas.
urls
-
Capa donde se encuentran las rutas.
views
Capa donde encuentran funciones de -
conexión al serializer.
serializers
Capa donde encuentran funciones de -
conexión al modelo.
models
Capa de abstracción de las entidades del
modelo de datos.
-
triviatour_access_db
triviatour_friends_db
triviatour_versus_db
Data Contiene triviatour_game_db
Capa encargada de las bases de datos.
triviatour_questions_db
triviatour_profiles_db
triviatour-ldap
triviatour_access_db
Base de datos en mongo q ue almacena
Contiene database
las credenciales de los usuarios del
sistema de software.
triviatour_friends_db
Base de datos en Mysql que almacena la
Contiene database
lista de amigos de los usuarios del
sistema de software.
triviatour_versus_db
Base de datos en PostgreSQL que
Contiene database
almacena los registros de retos entre
jugadores.
triviatour_game_db
Base de datos en mongoDB q ue
almacena los registros de las trivias Contiene database
jugadas por los usuarios y la lista de
países del mundo.
triviatour_questions_db
Base de datos en MySQL q ue almacena
Contiene database
las preguntas junto con sus opciones de
respuesta para las trivias.
triviatour_profiles_db
Base de datos en MySQL q ue almacena Contiene database
los atributos del jugador.
database
Capa donde se encuentra la la base de
-
datos de un microservicio
Trivia Tour
Relaciones entre elementos
Capa Relación Capa
Allowed to use
activities adapters
below
(triviatour-ma) (triviatour-ma)
(le permite usar)
Allowed to use
triviatour_proxy triviatour_api_gateway
(le permite usar)
Allowed to use
triviatour_api_gateway triviatour_access_ms
(le permite usar)
Allowed to use
triviatour_api_gateway triviatour_friends_ms
(le permite usar)
Allowed to use
triviatour_api_gateway triviatour_versus_ms
(le permite usar)
Allowed to use
triviatour_api_gateway triviatour_game_ms
(le permite usar)
Allowed to use
triviatour_api_gateway triviatour_questions_ms
(le permite usar)
Allowed to use
triviatour_api_gateway triviatour_profiles_ms
(le permite usar)
Allowed to use
triviatour_access_ms triviatour-ldap
(le permite usar)
Allowed to use
microservices server addresses
(le permite usar)
Allowed to use
schema resolver
(le permite usar)
2.5. Vista de Despliegue
2.5.1. Representación Gráfica.
2.5.2. Representación en Sarch
deployment_view ::
elements{
environmental_element_types{
node;
container;
mobile_phone;
cloud_service;
}
operating_systems{
ubuntu;
android;
}
execution_environments{
nodejs;
gorilla;
ASPNET_Core;
puma;
django;
mongodb;
mysql;
postgresql;
openldap;
nginx;
vuejs;
}
relations {
ee: cloud_service contains ee: triviatour_node_1;
ee: cloud_service contains ee: triviatour_node_2;
ee: cloud_service contains ee: triviatour_node_3;
ee: cloud_service contains ee: triviatour_node_4;
ee: cloud_service contains ee: triviatour_node_web;
Trivia Tour
Elemento Relación Contenedor
triviatour-node-1 container-ldap
Nodo #1 del Sistema de
Software container-access-ms
posee container-access-db
container-friends-ms
container-friends-db
triviatour-node-2 container-game-ms
Nodo #2 del Sistema de
Software container-game-db
posee
container-profile-ms
container-profile-db
triviatour-node-3 container-questions-ms
Nodo #3 del Sistema de
Software container-questions-db
posee
container-versus-ms
container-versus-db
triviatour-node-4 container-api-gateway
Nodo #4 del Sistema de
Software posee container-proxy
container-interface
triviatour-node-web
Nodo que ejecuta el
posee container-wa
contenedor de la aplicación
web
firebase-cloud-messaging push-notification-service
Solución en la nube Servicio de notificaciones del
multiplataforma para Sistema de Software
posee
mensajes y notificaciones
para Android, iOS y
aplicaciones web
user-phone android
Teléfono móvil de un Entorno donde se ejecuta la
posee
usuario del Sistema de aplicación móvil del Sistema de
Software Software
triviatour-ldap container-ldap
LDAP que posee los Contenedor con entorno de
desplegado en
usuarios del Sistema de ejecución openLDAP usando el
Software puerto 369
triviatour-access-ms container-access-ms
Microservicio que maneja el Contenedor con entorno de
desplegado en
registro y acceso al sistema ejecución Node.JS usando el
de software puerto 3000
triviatour-access-db container-access-db
Base de datos que Contenedor con entorno de
desplegado en
almacena las credenciales ejecución mongoDB usando el
de los jugadores puerto 27017
triviatour-friends-ms container-friends-ms
Microservicio que maneja Contenedor con entorno de
desplegado en
los amigos de los jugadores sando el puerto
ejecución gorilla u
4000
triviatour-friends-db container-friends-db
Base de datos que Contenedor con entorno de
desplegado en
almacena los amigos de los ejecución MySQL usando el
jugadores puerto 3306
triviatour-game-ms container-game-ms
Microservicio que maneja Contenedor con entorno de
desplegado en
las trivias, partidas y lista ejecución Node.JS usando el
de países puerto 3000
triviatour-game-db container-game-db
Base de datos que Contenedor con entorno de
desplegado en
almacena las trivias, ejecución mongoDB usando el
partidas y lista de países puerto 27017
triviatour-profile-ms container-profile-ms
Microservicio que maneja Contenedor con entorno de
desplegado en
los perfiles de los jugadores ejecución ASP.NET core usando
el puerto 5000
triviatour-profile-db container-profile-db
Base de datos que Contenedor con entorno de
almacena los perfiles de los ejecución MySQL usando el
jugadores puerto 3306
desplegado en
triviatour-questions-ms container-questions-ms
Microservicio para crear las Contenedor con entorno de
preguntas de las trivias ejecución puma usando el puerto
desplegado en
8080
triviatour-questions-db container-questions-db
Base de datos que Contenedor con entorno de
desplegado en
almacena las preguntas de ejecución MySQL usando el
las trivias puerto 3306
triviatour-versus-ms container-versus-ms
Microservicio que maneja Contenedor con entorno de
desplegado en
los retos entre jugadores ejecución Django usando el
puerto 8990
triviatour-versus-db container-versus-db
Base de datos que Contenedor con entorno de
desplegado en
almacena los retos entre ejecución PosgreSQL usando el
jugadores puerto 5432
triviatour-api-gateway container-api-gateway
API Gateway que comunica Contenedor con entorno de
desplegado en
con los microservicios del ejecución Node.JS usando el
Sistema de Software puerto 3000
triviatour-proxy container-proxy
Proxy inverso que Contenedor con entorno de
comunica con el API desplegado en ejecución Nginx usando el puerto
Gateway del Sistema de 8085
Software
triviatour-interface container-interface
Interfaz del Sistema de Contenedor con entorno de
desplegado en
Software que maneja la sando el
ejecución Node.JS u
información de países puerto 3010
triviatour-wa container-wa
Front-End para navegador Contenedor con entorno de
desplegado en
web del Sistema de ejecución Vue.JS usando el
Software puerto 3000
triviatour-ma user-phone
Front-End para dispositivo Dispositivo móvil de un usuario
móvil del Sistema de con Sistema Operativo Android
Software
desplegado en
1A NR-Infrasctructure
Sistema de Software del Infraestructura desconocida de
grupo 1A un Sistema de Información
desplegado en externo
1C
Sistema de Software del
grupo 1C
3. Perspectivas Arquitectónicas
3.1. Seguridad
Al registrarse e iniciar sesión en el sistema de software desde la aplicación móvil
y/o web se comunicará con el proxy inverso (triviatour-proxy) que lo redirecciona al
API gateway (triviatour-api-gateway) que a su vez lo redirecciona al microservicio
de acceso (triviatour-access-ms). El microservicio de acceso se encarga de la
gestión de usuarios, para el caso de registro de usuarios almacena la información
en la base de datos (triviatour-access-db) y crea el correspondiente usuario en el
LDAP, para el caso de inicio de sesión se usa autenticación de doble factor, primero
se compara las credenciales de acceso con el LDAP y luego con las almacenadas en
la base de datos, si todo es correcto, genera y devuelve un token de acceso para el
sistema de software que se almacena en el navegador y/o dispositivo móvil del
usuario (el token de acceso sólo encripta ─HMAC utilizando el algoritmo hash
SHA-256─ el id de registro que asigna la base de datos).
3.2. Interoperabilidad
Dentro de esta perspectiva tenemos dos flujos: servicio de notificaciones y
exposición/consumo de un servicio por protocolo SOAP. Para el servicio de
notificaciones utilizamos un BaaS, para nuestro caso Firebase Cloud Messaging,
donde nos referiremos a este servicio como FCM para facilitar la lectura.
Primer Flujo: Servicio de Notificaciones
Al interactuar con la aplicación móvil y web con operaciones de envío de solicitudes
de amistad o aceptaciones de solicitudes de amistad, estos dos componentes de
front-end se comunican con el proxy inverso del sistema de software
(triviatour-proxy) que lo redirecciona (por GraphQL) al API Gateway
(triviatour-api-gateway), hay que aclarar primero que para enviar una notificación
se requiere un token FCM, el usuario al iniciar sesión en el sistema de software
desde algún componente front-end del mismo, recoge su token de acceso y su
token FCM (que es generado por el servicio FCM exclusivamente para el dispositivo
del cliente) y es enviado al proxy inverso que lo redirecciona al API Gateway y este
a su vez al microservicio de acceso (triviatour-access-ms) para validar la operación
con el token de acceso y almacenar el token FCM en la base de datos
(triviatour-access-db).
Retomando las operaciones de agregar amigos (enviar y aceptar solicitudes de
amistad) el API Gateway del sistema de software hace una petición (por REST) al
microservicio de acceso para recuperar el token FCM del usuario a quien será
enviado la notificación, luego toma dicho token FCM junto con la operación
correspondiente de agregar amigos y lo envía al microservicio de amigos
(triviatour-friends-ms).
En el microservicio de amigos ejecuta la operación de enviar o aceptar la solicitud
de amistad y almacena su correspondiente registro en la base de datos
(triviatour-friends-ms) luego con el token FCM recibido envía una solicitud de
notificación al servicio de Firebase Cloud Messaging, donde se comunica con el
componente front-end que coincida con el token FCM y emite la correspondiente
notificación.
Segundo Flujo: exposición/consumo de un servicio por protocolo SOAP
Tenemos tres sistemas de software: el sistema de software del grupo 1A, 1B y 1C.
Nuestro sistema de software Triviatour corresponde al grupo 1B, donde
consumimos desde nuestro componente triviatour-interface un servicio por
protocolo SOAP expuesto por el grupo 1A, que nos entrega registros de
ubicaciones; para verificar la operación se implementó un servicio por protocolo
REST en triviatour-interface que validamos por la herramienta Postman o con un
navegador web para hacer la petición a la interfaz (triviatour-interface) y este a su
vez (por protocolo SOAP) al sistema de software del grupo 1A para traer los
registros de unicaciones.
En nuestro componente triviatour-interface exponemos por protocolo SOAP
registros de países del mundo que consume el sistema de software del grupo 1C.
Al realizar una petición por el protocolo SOAP con el código del país al
componente triviatour-interface, este se comunica con el API Gateway (por
GraphQL), luego de identificar la operación solicitada pide (por REST) al
microservicio de juego (triviatour-game-ms) los registros del país solicitado
(almacenados con MySQL) que son recuperados de la base de datos
(triviatour-game-db) y retorna la información hallada por el mismo flujo descrito
para su consumo por protocolo SOAP en triviatour-interface para el sistema de
software del grupo 1C.
4. Implementación del Sistema de Software
4.1. Prototipo #2 - Back-End I: enlace
4.2. Prototipo #3 - Back-End II: enlace
4.3. Prototipo #5 - Seguridad: enlace
4.4. Prototipo #6 - Interoperabilidad: enlace