Está en la página 1de 50

 

Universidad Nacional de Colombia 


Facultad de Ingeniería 
Ingeniería de Sistemas y Computación 
 
 
Arquitectura de Software 
Grupo 1B 
 
 
Prototipo #6: Interoperability 
 
 
Jeisson Andrés Vergara Vargas 
Docente 
 
 
Gustavo Gálvez Bello 
Miguel Alfredo Medellín Ráquira 
Oscar Fabian Mendez 
Brayan Alexander Riascos Ruiz 
Juan David Solano Salazar 
Edinson Vega Barrera 
Estudiantes 
 
 
 
Bogotá, Junio 2020 
Prototipo #6: Interoperability 
 
1. Introducción 
1.1. Sistema de Software 
1.1.1. Nombre: ​Trivia Tour 
1.1.2. Logo 

 
 
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 

1  First Design  Edinson Vega Barrera 

2  Back-End I  Brayan Alexander Riascos Ruiz 

3  Back-End II  Miguel Alfredo Medellín Ráquira 

4  Front-End  Oscar Fabian Mendez 

5  Security  Gustavo Gálvez Bello 

6  Interoperability  Juan David Solano Salazar 


 
2. Vistas Arquitectónicas 
2.1. Vista de Descomposición 
2.1.1. Representación en Grafo 

 
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 

Maneja el acceso y registro del usuario en el sistema  Submódulo Acceso 


junto con sus datos y lista de amigos. 
Submódulo Perfil 

Submódulo Amigos 

Módulo  Trivia  Componentes 

Posee el juego de trivia en su modalidad contra la  Submódulo Juego 


máquina y multijugador 
Submódulo Preguntas 

Submódulo Versus 

Componentes 

Funcionalidad Registro 
Registra el usuario en el sistema de software 

Funcionalidad Iniciar Sesión 


Submódulo 
Inicio de sesión del usuario en el sistema de software 
Acceso 
Registro e inicio  Funcionalidad Cambiar contraseña 
de sesión en el  Cambia la clave de acceso en el sistema de software 
Juego 
Funcionalidad Cambiar correo 
Cambia el correo del usuario en el sistema de software 
 
 
 

Funcionalidad Información de Perfil 


Mira la información del Jugador 

Funcionalidad Puntaje del Jugador 


Registra y cambia el puntaje del jugador de acuerdo a su 
progreso dentro del juego 
S​ubmódulo 
Perfil  Funcionalidad Nivel del Jugador 
Información y  Registra y cambia el nivel del jugador de acuerdo al puntaje 
progreso del  acumulado dentro del juego 
Jugador   
 
 
 
 
 
Funcionalidad Agregar Amigos 
Agrega otros jugadores del sistema de software 
Submódulo 
Amigos  Funcionalidad Ver Amigos 
Maneja los  Mira una lista de amigos agregados en el juego 
amigos del 
Jugador  Funcionalidad Eliminar Amigos 
Elimina usuarios de la lista de amigos 
 

Funcionalidad Mapa del Mundo 


Mira y escoge en un mapa los países del mundo 

Funcionalidad Escoger País 


Escoge un país del mapa del mundo e inicia una trivia con 
Submódulo  tema del país escogido 
Juego 
Funcionalidad Responder Trivia 
Juego de Trivia 
Responde una trivia del país escogido 
en modo 
solitario  Funcionalidad Resultado Trivia 
Mira el resultado obtenido de la trivia respondida 

Funcionalidad Historial Trivias 


Mira el historial de trivias jugadas 
 

Funcionalidad Crear Pregunta 


Crea una pregunta de trivia 

Funcionalidad Agregar Opciones de Respuesta 


Crea opciones de respuesta para agregarlas a una pregunta 
de trivia 

Funcionalidad Calificar Pregunta 


Califica una pregunta respondida en una trivia 

Funcionalidad Agregar elementos multimedia como 


Submódulo  opciones de respuesta 
Preguntas  Agrega fotos, audio y vídeo como opciones de respuesta a 
Crea preguntas  una pregunta de trivia creada 
para las Trivias 
Funcionalidad Establecer opción de respuesta correcta 
Escoge la opción o opciones de respuesta correcta en una 
pregunta de trivia 

Funcionalidad Escoger Categoría de Pregunta 


Selecciona la categoría de la pregunta de trivia creada 
(cultura, música, deporte, ciencia, entretenimiento, entre 
otros) 
 
 
 
Funcionalidad Iniciar Versus 
Reta a un jugador a resolver una trivia 

Submódulo  Funcionalidad Aceptar Versus 


Versus  Acepta un reto de trivia enviado por un jugador 
Retos de Trivia 
contra otros  Funcionalidad Resultado Versus 
Jugadores  Mira el resultado de un reto de trivia entre dos jugadores 

Funcionalidad Historial Versus 


Revisa el historial de trivias aceptadas contra otros jugadores 
 
2.2. Vista de Modelos de Datos 
2.2.1. Representación Gráfica 

 
2.2.2. Representación en Sarch 

​data_model_view​::

​nosql​ ​data_model​ ​data_model_access​ {


​elements​ {
​data_entity​ ​user​ {
​attributes​ {
​int​ ​id​;
​string​ ​nickname​;
​string​ ​email​;
​string​ ​passwordHash​;
​bool​ ​isEnabled​;
​time​ ​createdAt​;
​time​ ​updateAt​;
}
}
}
}

​relational​ ​data_model​ ​data_model_friends​ {


​elements​ {
​data_entity​ ​friend​ {
​attributes​ {
​int​ ​user_one_id​;
​int​ ​user_two_id​;
string​ ​status​;
​time​ ​created_at​;
​time​ ​update_at​;
}
}
}
}

​nosql​ ​data_model​ ​data_model_game​ {


​elements​ {
​data_entity​ ​trivia​ {
​attributes​ {
​string​ ​title​;
​string​ ​description​;
​time​ ​created_at​;
​time​ ​updated_at​;
}
}

​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​);
}
}

​relational​ ​data_model​ ​data_model_profiles​ {


​elements​ {
​data_entity​ ​profile​ {
​attributes​ {
​int​ ​id_user​;
​int​ ​level​;
​int​ ​score​;
​time​ ​created_at​;
​time​ ​update_at​;
}
}
}
}
​relational​ ​data_model​ ​data_model_questions​ {
​elements​ {
​data_entity​ ​question​ {
​attributes​ {
​int​ ​id_question​;
​int​ ​id_country​;
​int​ ​id_category​;
​string​ ​content​;
​string​ ​multimedia_url​;
​string​ ​multimedia_type​;
​float​ ​score​;
​time​ ​created_at​;
​time​ ​updated_at​;
}
}

​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  triviatour-access-db 

Base de datos en mongoDB que almacena las credenciales de los usuarios del 
sistema de software 

Entidad de Datos  User  Relación  Entidad de Datos 

Almacena los datos de acceso del  de cero a muchos  Attempt 


usuario al sistema de software 
de cero a muchos con 
Friend 
la llave user_one_id 

de cero a muchos con 


Friend 
la llave user_two_id 

de cero a uno  Profile 

de cero a muchos  Trivia 

Campo  Tipo  Descripción 

id  Integer  Llave primaria de usuario 

nickname  String  nombre de usuario 

email  String  correo de usuario 

passwordHash  String  clave de acceso de la cuenta encriptada 

isEnabled  String  cuenta habilitada o deshabilitada 

createdAt  Timestamp  Fecha y hora de creación del registro 

updatedAt  Timestamp  Fecha y hora de la última actualización del 


registro 
 
 
 
 
 
 
 
 
 
 
 
Base de Datos  triviatour-friends-db 

Base de datos en Mysql que almacena la lista de amigos de los usuarios del 
sistema de software 

Entidad de Datos  Friend  Relación  Entidad de Datos 

Almacena la relación de amistad  uno a uno de 


User 
entre jugadores  user_one_id con id 

uno a uno de 


User 
user_two_id con id 

Campo  Tipo  Descripción 

Identificador de usuario, llave compuesta 


user_one_id  Integer 
con user_two_id 

Identificador de usuario, llave compuesta 


user_two_id  Integer 
con ​user_one_id 

status  String  Estado de la solicitud de amistad 

created_at  Timestamp  Fecha y hora de creación del registro 

Fecha y hora de la última actualización del 


updated_at  Timestamp 
registro 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Base de Datos  triviatour-game-db 

Base de datos en mongoDB que almacena los registros de las trivias jugadas 
por los usuarios y la lista de países del mundo 

Entidad de Datos  Trivia  Relación  Entidad de Datos 

Almacena las trivias creadas en el  de composición  Attempt 


juego 
de agregación  Country 

de cero a muchos  Question 

de uno con la llave 


Trivia 
foránea ​user.id 

de cero a muchos  Versus 

Campo  Tipo  Descripción 

_id  String  Llave primaria de una trivia 

user.id  Integer  Llave foránea del creador de la trivia 

title  String  Título de la trivia 

description  String  Descripción de la Trivia 

Objeto de tipo country que contiene 


country.code  Integer  únicamente el código del país 
seleccionado de la trivia 

Arreglo de enteros con el código de las 


questions  Array[Integer] 
preguntas que posee la trivia 

created_at  Timestamp  Fecha y hora de creación del registro 

Fecha y hora de la última actualización 


updated_at  Timestamp 
del registro 
 
 
 
 
 
 
 
 
 
 
 
 
 
Entidad de Datos  Attempt  Relación  Entidad de Datos 

Registro de las trivia jugadas por los  de una a muchas  Question 


usuarios 
de composición  Question_Attempt 

es un 
componente de  Trivia 
Trivia 

de uno por 
User 
usuario 

de cero o uno con 


con el campo  Versus 
callenger_attempt 

de cero o uno con  Versus 


con el campo 
defensor_attempt 

Campo  Tipo  Descripción 

_id  String  Llave primaria de mongoDB 

Objeto user que contiene únicamente 


user.id  Integer  el id del usuario, que coincide con el 
id_user ​de la entidad de datos ​User 

Arreglo de objetos del tipo de entidad 


questions  Array[question] 
de datos ​question_attempt 

created_at  Timestamp  Fecha y hora de creación del registro 

Fecha y hora de la última actualización 


updated_at  Timestamp 
del registro 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Entidad de Datos  Country  Relación  Entidad de Datos 

Almacena los países actuales del  conectado a trivia 


Trivia 
mundo  por su campo ​code 

Campo  Tipo  Descripción 

Código numérico ​único ​regulado por la 


code  String 
ISO 3166-1 

name  String  Nombre común del país 

​ e país compuesto por 


Código ​único d
alpha2Code  String  dos letras del alfabeto regulado por el 
ISO 3166-1 

​ e país compuesto por 


Código ​único d
alpha3Code  String  tres letras del alfabeto regulado por el 
ISO 3166-1 

created_at  Timestamp  Fecha y hora de creación del registro 

Fecha y hora de la última actualización 


updated_at  Timestamp 
del registro 
 
 
 

Question_ 
Entidad de Datos  Relación  Entidad de Datos 
Attempt 

Registro de las preguntas  es un componente  Attempt 


respondidas por los jugadores en la  de ​Attempt 
trivia 

Campo  Tipo  Descripción 

ID de pregunta que corresponde con el 


id  Integer 
ID almacenado en la entidad ​Pregunta 

Indica si la pregunta fue respondida de 


isRight  Boolean 
forma correcta (​true​) o incorrecta (​false)​  
 
 
 
 
 
 
 
 
 
 
Base de Datos  triviatour-profiles-db 

Base de datos en MySQL que almacena los atributos del jugador 

Entidad de Datos  Profile  Relación  Entidad de Datos 

Guarda los atributos del jugador  de uno a uno  User 

Campo  Tipo  Descripción 

id_user  Integer  Llave primaria del usuario 

Nivel del jugador de acuerdo con el puntaje 


level  Integer 
acumulado 

score  Integer  Puntaje acumulado del jugador 

created_at  Timestamp  Fecha y hora de creación del registro 

Fecha y hora de la última actualización del 


updated_at  Timestamp 
registro 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Base de Datos  triviatour-questions-db 

Base de datos en MySQL que almacena las preguntas junto con sus opciones de 
respuesta para las trivias 

Entidad de Datos  Question  Relación  Entidad de Datos 

Guarda el encabezado de las  de uno a muchos  Answer 


preguntas y la relación con sus 
opciones de respuesta  de cero a muchos  Attempt 

de uno  Category 

de uno  Country 

de muchos  Trivia 

Campo  Tipo  Descripción 

id_question  Integer  llave primaria de la pregunta 

id_country  Integer  código del país que pertenece la trivia 

id_category  Integer  llave foránea de la categoría de la pregunta 

content  String  Enunciado de la pregunta 

Enlace donde se almacena la multimedia 


multimediaUrl  String 
asociada al encabezado de la pregunta 

Tipo de multimedia agregada en el campo 


multimediaType  Enum 
multimediaUrl:​ ​text,​ ​photo,​ ​audio​, ​vídeo​. 

Peso de valor que tiene la pregunta dentro 


score  Float 
de la trivia para su posterior puntuación 

created_at  Timestamp  Fecha y hora de creación del registro 

Fecha y hora de la última actualización del 


updated_at  Timestamp 
registro 
 
 
 
 
 
 
 
 
 
 
 
Entidad de Datos  Answer  Relación  Entidad de Datos 

Almacena las opciones de 


de uno  Question 
respuesta de cada pregunta 

Campo  Tipo  Descripción 

id_answer  Integer  llave primaria de la opción de respuesta 

llave foránea del encabezado de la 


id_question  Integer 
pregunta 

enunciado o url de multimedia de la opción 


content  String 
de respuesta 

Tipo de contenido agregado en el campo 


contentType  Enum 
content​: ​text,​ ​photo,​ ​audio​, ​vídeo​. 

Establece si la opción de respuesta es la 


isRight  Boolean  correcta (​true​) o incorrecta (​false​) de la 
pregunta vinculada 

created_at  Timestamp  Fecha y hora de creación del registro 

Fecha y hora de la última actualización del 


updated_at  Timestamp 
registro 
 
 
Entidad de Datos  Category  Relación  Entidad de Datos 

Almacena las categorías de las 


de uno a muchos  Question 
preguntas 

Campo  Tipo  Descripción 

id_category  Integer  llave primaria de la categoría 

name  String  Nombre de la categoría 

created_at  Timestamp  Fecha y hora de creación del registro 

Fecha y hora de la última actualización del 


updated_at  Timestamp 
registro 
 
 
 
 
 
 
 
 
Base de Datos  triviatour-versus-db 

Base de datos en PostgreSQL que almacena los registros de retos entre 


jugadores. 

Entidad de Datos  Versus  Relación  Entidad de Datos 

Registros de retos de trivias  de cero o muchos  Attempt 


entre los jugadores 
de cero o muchos  Attempt 

de uno  Trivia 

de uno con el campo 


User 
challenging_player 

de uno con el campo 


User 
defending_score 

Campo  Tipo  Descripción 

id_versus  Integer  llave primaria del versus 

id_trivia  String  ID de la trivia jugada o por jugar 

ID del registro de la trivia jugada por el 


challenger_attempt  String 
retador 

ID del registro de la trivia jugada por el 


defensor_attempt  String 
defensor o jugador retado 

challenging_player  Integer  ID del jugador retador 

defending_player  Integer  ID del jugador defensor o retado 

Puntaje de la trivia obtenido por el jugador 


challenging_score  Integer 
retador 

Puntaje de la trivia obtenido por el jugador 


defending_score  Integer 
defensor o retado 

status  Enum  Estado del reto: ​pending​, ​rejected​, f​ inalized 

created_at  Timestamp  Fecha y hora de creación del registro 

Fecha y hora de la última actualización del 


updated_at  Timestamp 
registro 
 
 
 
 
 
 
2.3. Vista de Componentes y Conectores (C&C) 
2.3.1. Representación Gráfica 
 

 
 
 
 
 
 
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​;
}

​component​ ​database​ ​triviatour_access_db​(​data_model​ ​data_model_access​)(​db_system​ ​mongodb​);


​component​ ​database​ ​triviatour_friends_db​(​data_model​ ​data_model_friends​)(​db_system​ m
​ ysql​);
​component​ ​database​ ​triviatour_game_db​(​data_model​ ​data_model_game​)(​db_system​ ​mongodb​);
​component​ ​database​ ​triviatour_profiles_db​(​data_model​ ​data_model_profiles​)(​db_system​ ​mysql​);
​component​ ​database​ ​triviatour_questions_db​(​data_model​ ​data_model_questions​)(​db_system​ ​mysql​);
​component​ ​database​ ​triviatour_versus_db​(​data_model​ ​data_model_versus​)(​db_system​ ​postgresql​);

​component​ ​ldap​ ​triviatour_ldap​;


​component​ ​cloud_firebase​ ​triviatour_messaging​;

​component​ ​microservice​ ​triviatour_access_ms​ (​programming_language​ j


​ avascript​);
​component​ ​microservice​ ​triviatour_friends_ms​ (​programming_language​ ​go​);
​component​ ​microservice​ ​triviatour_game_ms​ (​programming_language​ ​javascript​);
​component​ ​microservice​ ​triviatour_profiles_ms​ (​programming_language​ ​c_char​);
​component​ ​microservice​ ​triviatour_questions_ms​ (​programming_language​ ​ruby​);
​component​ ​microservice​ ​triviatour_versus_ms​ (​programming_language​ p
​ ython​);

​component​ ​interface​ ​triviatour_interface​(​programming_language​ ​javascript​);


​component​ ​api_gateway​ ​triviatour_api_gateway​ (​programming_language​ ​javascript​);
​component​ ​proxy​ ​triviatour_proxy​;
​component​ ​web_application​ ​triviatour_wa​ (​programming_language​ ​javascript​);
​component​ ​mobile_application​ ​triviatour_ma​ (​programming_language​ ​kotlin​);
​connector​ ​mysql_connector​;
​connector​ ​nosql_connector​;
​connector​ ​rest​;
​connector​ ​ldap​;
​connector​ ​graphql​;
​connector​ ​http​;
​connector​ ​mongodb_connector​;
​connector​ ​posgresql_connector​;
}

​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​);

​attachment​(​ldap​: ​triviatour_ldap​, ​triviatour_access_ms​);

​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_access_ms​);


​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_friends_ms​);
​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_game_ms​);
​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_profiles_ms​);
​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_questions_ms​);
​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_versus_ms​);

​attachment​(​http​: ​triviatour_friends_ms​, ​triviatour_messaging​);

​attachment​(​graphql​: ​triviatour_api_gateway​, ​triviatour_interface​);


​attachment​(​graphql​: ​triviatour_proxy​, ​triviatour_api_gateway​);
​attachment​(​http​: ​triviatour_wa​, ​triviatour_proxy​);
​attachment​(​http​: ​triviatour_ma​, ​triviatour_proxy​);
}
::

 
 
 
 
 
 
 
 
 
 
 
 
 
 
2.3.3. Descripción de la Vista 

Trivia Tour 
Componente  Conector  Componente 

triviatour-wa  http  triviatour-proxy 


Front-end de tipo web  Protocolo de 
desarrollo con el lenguaje  transferencia de  firebase-cloud-messaging 
de programación ​Javascript  hipertexto  Solución en la nube
usando el framework  multiplataforma para
progresivo ​Vue.​   mensajes y notificaciones
  para Android, iOS y
aplicaciones web que
maneja las notificaciones
del Sistema de Software. 

triviatour-ma  http  triviatour-proxy 


Front-end de tipo móvil  Protocolo de 
desarrollo con el lenguaje  transferencia de  firebase-cloud-messaging 
de programación Kotlin  hipertexto  Solución en la nube
para el Sistema Operativo  multiplataforma para
Android​.  mensajes y notificaciones
  para Android, iOS y
aplicaciones web que
maneja las notificaciones
del Sistema de Software. 

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 

triviatour-access-ms  mongodb-connector  triviatour-access-db 


Microservicio desarrollado  Conexión ​mongoDB  Base de datos en ​mongoDB 
con el lenguaje de  entre back-end y base  que almacena las 
programación ​Javascript,​   de datos.  credenciales de los 
usando el entorno de  usuarios del sistema de 
tiempo de ejecución  software. 
NodeJS,​ ​ ​maneja 
autenticación y registro en 
el sistema de software. 
 
 
 
 
 
 
mysql-connector  triviatour-friends-db 
Conexión ​MySQL  Base de datos en ​MySQL 
entre back-end y base  que almacena la lista de 
de datos.  amigos de los usuarios del 
triviatour-friends-ms  sistema de software. 
Microservicio desarrollado 
con el lenguaje de  http  firebase-cloud-messaging 
programación ​Go,​ maneja  Protocolo de  Solución en la nube
las solicitudes de amistad y  transferencia de  multiplataforma para
la lista de amigos.  hipertexto  mensajes y notificaciones
para Android, iOS y
aplicaciones web que
maneja las notificaciones
del Sistema de Software. 

triviatour-game-ms  mongodb-connector  triviatour-game-db 


Microservicio desarrollado  Conexión ​mongoDB  Base de datos en ​mongoDB 
con el lenguaje de  entre back-end y base  que almacena los registros 
programación ​JavaScript  de datos.  de las trivias jugadas por 
usando el entorno de  los usuarios y la lista de 
tiempo de ejecución  países del mundo. 
NodeJS,​ maneja el juego de 
trivia (crear y responder 
trivias), historial de 
partidas y lista de países. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
triviatour-profiles-ms  triviatour-profiles-db 
Microservicio desarrollado  Base de datos en ​MySQL 
con el lenguaje de  que almacena los atributos 
programación ​C#​ usando el  del jugador. 
framework de desarrollo 
.NET core,​ maneja las 
estadísticas base del 
jugador.  mysql-connector 
Conexión ​MySQL e​ ntre 
triviatour-questions-ms  back-end y base de  triviatour-questions-db 
Microservicio desarrollado  datos.  Base de datos en ​MySQL 
con el lenguaje de  que almacena las 
programación ​Ruby u ​ sando  preguntas junto con sus 
el framework de desarrollo  opciones de respuesta 
Ruby on Rails​, maneja la  para las trivias. 
creación de preguntas 
junto con sus opciones de 
respuesta. 

triviatour-versus-ms  postgresql-  triviatour-versus-db 


Microservicio desarrollado  connector  Base de datos en 
con el lenguaje de  Conexion PostgreSQL  PostgreSQL​ q​ ue almacena 
programación ​Python  entre back-end y base  los registros de retos entre 
usando el framework de  de datos.  jugadores. 
desarrollo ​Django, m​ aneja 
los retos entre los 
jugadores. 

1A  SOAP  triviatour-interface 


Sistema de Software del  Protocolo tipo SOAP  Consumo de registros de 
Grupo 1A  entre el Sistema de  ubicación del Sistema de 
Software 1A y la  Software del grupo 1A 
interfaz de triviatour 

1C  SOAP  triviatour-interface 


Sistema de Software del  Protocolo tipo SOAP  Exposición de registros de 
Grupo 1A  entre el Sistema de  de países de nuestro 
Software 1C y la  Sistema de Software 
interfaz de triviatour  Triviatour 

rest-client  REST  triviatour-interface 


Cliente externo que  Conector de tipo REST  Exposición de los registros 
consume la interfaz del  entre la interfaz del  de ubicación obtenidos del 
Sistema de Software  Sistema de Software y  Sistema de Software del 
un cliente tipo rest.  grupo 1A 

firebase_cloud_messagin http  triviatour-friends-db 


g(baas)  Protocolo de  Base de datos en ​MySQL 
Servicio para la notificación  transferencia de  que almacena la lista de 
de mensajes.  hipertexto  amigos de los usuarios del 
sistema de software. 
firebase_cloud_messagin http  triviatour-wa 
g(baas)  Protocolo de  Front-end de tipo web 
Servicio para la notificación  transferencia de  desarrollo con el lenguaje 
de mensajes.  hipertexto  de programación 
Javascript ​usando el 
framework progresivo ​Vue​. 

firebase_cloud_messagin http  triviatour-ma 


g(baas)  Protocolo de  Front-end de tipo móvil 
Servicio para la notificación  transferencia de  desarrollo con el lenguaje 
de mensajes.  hipertexto  de programación Kotlin 
para el Sistema Operativo 
Android.​  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2.4. Vista de capas 
2.4.1.1. Representación Gráfica.
2.4.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​;
​bass​;
​api_gateway​;
​proxy​;
​interface​;
​web_application​;
​mobile_application​;
​external_system​;

​component​ ​database​ ​triviatour_access_db​(​data_model​ ​data_model_access​)(​db_system​ ​mongodb​);


​component​ ​database​ ​triviatour_friends_db​(​data_model​ ​data_model_friends​)(​db_system​ m
​ ysql​);
​component​ ​database​ ​triviatour_game_db​(​data_model​ ​data_model_game​)(​db_system​ ​mongodb​);
​component​ ​database​ ​triviatour_profiles_db​(​data_model​ ​data_model_profiles​)(​db_system​ ​mysql​);
​component​ ​database​ ​triviatour_questions_db​(​data_model​ ​data_model_questions​)(​db_system​ ​mysql​);
​component​ ​database​ ​triviatour_versus_db​(​data_model​ ​data_model_versus​)(​db_system​ ​postgresql​);

​component​ ​ldap​ ​triviatour_ldap​;


​component​ ​bass​ ​firebase_cloud_messaging​;

​component​ ​microservice​ ​triviatour_access_ms​ (​programming_language​ ​javascript​);


​component​ ​microservice​ ​triviatour_friends_ms​ (​programming_language​ ​go​);
​component​ ​microservice​ ​triviatour_game_ms​ (​programming_language​ ​javascript​);
​component​ ​microservice​ ​triviatour_profiles_ms​ (​programming_language​ ​c_char​);
​component​ ​microservice​ ​triviatour_questions_ms​ (​programming_language​ ​ruby​);
​component​ ​microservice​ ​triviatour_versus_ms​ (​programming_language​ ​python​);

​component​ ​interface​ ​triviatour_interface​(​programming_language​ ​javascript​);


​component​ ​api_gateway​ ​triviatour_api_gateway​ (​programming_language​ ​javascript​);
​component​ ​proxy​ ​triviatour_proxy​;
​component​ ​web_application​ ​triviatour_wa​ (​programming_language​ ​javascript​);
​component​ ​mobile_application​ ​triviatour_ma​ (​programming_language​ ​kotlin​);
​component​ ​external_system​ ​group_a​;
​component​ ​external_system​ ​group_c​;
​component​ ​external_system​ ​rest_client​;

​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​);

​attachment​(​ldap​: ​triviatour_access_ms​, ​triviatour_ldap​);

​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_access_ms​);


​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_friends_ms​);
​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_game_ms​);
​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_profiles_ms​);
​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_questions_ms​);
​attachment​(​rest​: ​triviatour_api_gateway​, ​triviatour_versus_ms​);

​attachment​(​http​: ​triviatour_friends_ms​, ​firebase_cloud_messaging​);


​attachment​(​http​: ​triviatour_wa​, ​firebase_cloud_messaging​);
​attachment​(​http​: ​triviatour_ma​, ​firebase_cloud_messaging​);

​attachment​(​graphql​: ​triviatour_api_gateway​, ​triviatour_interface​);


​attachment​(​graphql​: ​triviatour_proxy​, ​triviatour_api_gateway​);
​attachment​(​http​: ​triviatour_wa​, ​triviatour_proxy​);
​attachment​(​http​: ​triviatour_ma​, ​triviatour_proxy​);

​attachment​(​soap​: ​group_c​, ​triviatour_interface​);


​attachment​(​soap​: ​triviatour_interface​, ​group_a​);

​attachment​(​rest​: ​rest_client​, ​triviatour_interface​);

}
::
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 

Presentación  Allowed to use  Logic 


  (le permite usar)   

Logic  Allowed to use 


Data 
  (le permite usar) 

router  Allowed to use  views 


(triviatour-wa)  (le permite usar)  (triviatour-wa) 

views  Allowed to use  components 


(triviatour-wa)  (le permite usar)  (triviatour-wa) 

Allowed to use 
activities  adapters 
below 
(triviatour-ma)  (triviatour-ma) 
(le permite usar) 

adapters  Allowed to use  models 


(triviatour-ma)  (le permite usar)  (triviatour-ma) 

adapters  Allowed to use  layout 


(triviatour-ma)  (le permite usar)  (triviatour-ma) 

models  Allowed to use  graphql 


(triviatour-ma)  (le permite usar)  (triviatour-ma) 

Allowed to use 
triviatour_proxy  triviatour_api_gateway 
(le permite usar) 

Allowed to use 
triviatour_api_gateway  triviatour_access_ms 
(le permite usar) 

routers  Allowed to use  controllers 


(triviatour_access_ms)  (le permite usar)  (triviatour_access_ms) 

controllers  Allowed to use  entities 


(triviatour_access_ms)  (le permite usar)  (triviatour_access_ms) 

Allowed to use 
triviatour_api_gateway  triviatour_friends_ms 
(le permite usar) 

routers  Allowed to use  controllers 


(triviatour_friends_ms)  (le permite usar)  (triviatour_friends_ms) 

controllers  Allowed to use 


repository 
(triviatour_friends_ms)  (le permite usar) 
(triviatour_friends_ms) 
 
repository  Allowed to use  models 
(triviatour_friends_ms)  (le permite usar)  (triviatour_friends_ms) 

Allowed to use 
triviatour_api_gateway  triviatour_versus_ms 
(le permite usar) 

urls  Allowed to use  views 


(triviatour_versus_ms)  (le permite usar)  (triviatour_versus_ms) 

views  Allowed to use  serializers 


(triviatour_versus_ms)  (le permite usar)  (triviatour_versus_ms) 

serializers  Allowed to use  models 


(triviatour_versus_ms)  (le permite usar)  (triviatour_versus_ms) 

Allowed to use 
triviatour_api_gateway  triviatour_game_ms 
(le permite usar) 

routers  Allowed to use  controllers 


(triviatour_game_ms)  (le permite usar)  (triviatour_game_ms) 

controllers  Allowed to use  entities 


(triviatour_game_ms)  (le permite usar)  (triviatour_game_ms) 

Allowed to use 
triviatour_api_gateway  triviatour_questions_ms 
(le permite usar) 

controllers  Allowed to use  models 


(triviatour_questions_ms)  (le permite usar)  (triviatour_questions_ms) 

Allowed to use 
triviatour_api_gateway  triviatour_profiles_ms 
(le permite usar) 

connectors  Allowed to use  controllers 


(triviatour_profiles_ms)  (le permite usar)  (triviatour_profiles_ms) 

controllers  Allowed to use  models 


(triviatour_profiles_ms)  (le permite usar)  (triviatour_profiles_ms) 

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​;
}

​software_element​ ​triviatour_access_db_prod​(​component​ ​triviatour_access_db​);


​software_element​ ​triviatour_friends_db_prod​(​component​ ​triviatour_friends_db​);
​software_element​ ​triviatour_game_db_prod​(​component​ ​triviatour_game_db​);
​software_element​ ​triviatour_profiles_db_prod​(​component​ ​triviatour_profiles_db​);
​software_element​ ​triviatour_questions_db_prod​(​component​ ​triviatour_questions_db​);
​software_element​ ​triviatour_versus_db_prod​(​component​ ​triviatour_versus_db​);
​software_element​ ​triviatour_access_ms_prod​(​component​ ​triviatour_access_ms​);
​software_element​ ​triviatour_friends_ms_prod​(​component​ ​triviatour_friends_ms​);
​software_element​ ​triviatour_game_ms_prod​(​component​ ​triviatour_game_ms​);
​software_element​ ​triviatour_profiles_ms_prod​(​component​ ​triviatour_profiles_ms​);
​software_element​ ​triviatour_questions_ms_prod​(​component​ ​triviatour_questions_ms​);
​software_element​ ​triviatour_versus_ms_prod​(​component​ ​triviatour_versus_ms​);
​software_element​ ​triviatour_ldap_prod​(​component​ ​triviatour_ldap​);
​software_element​ ​firebase_cloud_messaging_prod​(​component​ ​firebase_cloud_messaging​);
​software_element​ ​triviatour_proxy_prod​(​component​ ​triviatour_proxy​);
​software_element​ ​triviatour_api_gateway_prod​(​component​ ​triviatour_api_gateway​);
​software_element​ ​triviatour_interface_prod​(​component​ ​triviatour_interface​);
​software_element​ ​triviatour_wa_prod​ (​component​ ​triviatour_wa​);
​software_element​ ​triviatour_ma_prod​ (​component​ ​triviatour_ma​);
​environmental_element​ ​node​ ​triviatour_node_1​{
​ip​: ​'127.0.0.1'​;
​operating_system​: ​ubuntu​;
​cpu​: ​'4xcore'​;
​ram​: 8​gB​;
​storage_capacity​: 1​tB​;
​provider​: ​'AWS'​;
}

​environmental_element​ ​node​ ​triviatour_node_2​{


​ip​: ​'127.0.0.1'​;
​operating_system​: ​ubuntu​;
​cpu​: ​'4xcore'​;
​ram​: 8​gB​;
​storage_capacity​: 1​tB​;
​provider​: ​'AWS'​;
}

​environmental_element​ ​node​ ​triviatour_node_3​{


​ip​: ​'127.0.0.1'​;
​operating_system​: ​ubuntu​;
​cpu​: ​'4xcore'​;
​ram​: 8​gB​;
​storage_capacity​: 1​tB​;
​provider​: ​'AWS'​;
}

​environmental_element​ ​node​ ​triviatour_node_4​{


​ip​: ​'127.0.0.1'​;
​operating_system​: ​ubuntu​;
​cpu​: ​'4xcore'​;
​ram​: 8​gB​;
​storage_capacity​: 1​tB​;
​provider​: ​'AWS'​;
}

​environmental_element​ ​node​ ​triviatour_node_web​{


​ip​: ​'127.0.0.1'​;
​operating_system​: ​ubuntu​;
​cpu​: ​'4xcore'​;
​ram​: 8​gB​;
​storage_capacity​: 1​tB​;
​provider​: ​'AWS'​;
}

​environmental_element​ ​container​ ​container_access_db​{}


​environmental_element​ ​container​ ​container_friends_db​{}
​environmental_element​ ​container​ ​container_game_db​{}
​environmental_element​ ​container​ ​container_profiles_db​{}
​environmental_element​ ​container​ ​container_questions_db​{}
​environmental_element​ ​container​ ​container_versus_db​{}
​environmental_element​ ​container​ ​container_access_ms​{}
​environmental_element​ ​container​ ​container_friends_ms​{}
​environmental_element​ ​container​ ​container_game_ms​{}
​environmental_element​ ​container​ ​container_profiles_ms​{}

​environmental_element​ ​container​ ​container_questions_ms​{}


​environmental_element​ ​container​ ​container_versus_ms​{}

​environmental_element​ ​container​ ​container_ldap​{}


​environmental_element​ ​cloud_service​ ​firebase_cloud_messaging​{}

​environmental_element​ ​container​ ​container_proxy​{}


​environmental_element​ ​container​ ​container_interface​{}
​environmental_element​ ​container​ ​container_api_gateway​{}

​environmental_element​ ​container​ ​container_wa​{}

​environmental_element​ ​mobile_phone​ ​user_phone​{


​operating_system​: ​android​;
}

​environmental_element​ ​cloud_service​ ​AWS​{}


}

​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​;

​ee​: ​triviatour_node_1​ ​contains​ ​ee​: ​container_access_ms​;


​ee​: ​triviatour_node_1​ ​contains​ ​ee​: ​container_access_db​;
​ee​: ​triviatour_node_1​ ​contains​ ​ee​: ​container_ldap​;
​ee​: ​triviatour_node_1​ ​contains​ ​ee​: ​container_friends_ms​;
​ee​: ​triviatour_node_1​ ​contains​ ​ee​: ​container_friends_db​;

​ee​: ​triviatour_node_2​ ​contains​ ​ee​: ​container_game_ms​;


​ee​: ​triviatour_node_2​ ​contains​ ​ee​: ​container_game_db​;
​ee​: ​triviatour_node_2​ ​contains​ ​ee​: ​container_profiles_ms​;
​ee​: ​triviatour_node_2​ ​contains​ ​ee​: ​container_profiles_db​;

​ee​: ​triviatour_node_3​ ​contains​ ​ee​: ​container_questions_ms​;


​ee​: ​triviatour_node_3​ ​contains​ ​ee​: ​container_questions_db​;
​ee​: ​triviatour_node_3​ ​contains​ ​ee​: ​container_versus_ms​;
​ee​: ​triviatour_node_3​ ​contains​ ​ee​: ​container_versus_db​;

​ee​: ​triviatour_node_4​ ​contains​ ​ee​: ​container_proxy​;


​ee​: ​triviatour_node_4​ ​contains​ ​ee​: ​container_api_gateway​;
​ee​: ​triviatour_node_4​ ​contains​ ​ee​: ​container_interface​;

​ee​: ​triviatour_node_web​ ​contains​ ​ee​: ​container_wa​;

​se​: ​triviatour_access_ms_prod​ ​deployed_in


​ee​: ​container_access_ms​(​execution_environment​ ​nodejs​)(​port​ ​3000​);

​se​: ​triviatour_access_db_prod​ ​deployed_in


​ee​: ​container_access_db​(​execution_environment​ ​mongodb​)(​port​ ​27017​);
​se​: ​triviatour_ldap_prod​ ​deployed_in
​ee​: ​container_ldap​(​execution_environment​ ​openldap​)(​port​ ​369​);

​se​: ​triviatour_friends_ms_prod​ ​deployed_in


​ee​: ​container_friends_ms​(​execution_environment​ ​gorilla​)(​port​ ​4000​);

​se​: ​triviatour_friends_db_prod​ ​deployed_in


​ee​: ​container_friends_db​(​execution_environment​ ​mysql​)(​port​ ​3306​);

​se​: ​firebase_cloud_messaging_prod​ ​deployed_in


​ee​: ​firebase_cloud_messaging​;

​se​: ​triviatour_game_ms_prod​ ​deployed_in


​ee​: ​container_game_ms​(​execution_environment​ ​nodejs​)(​port​ ​3000​);

​se​: ​triviatour_game_db_prod​ ​deployed_in


​ee​: ​container_game_db​(​execution_environment​ ​mongodb​)(​port​ ​27017​);

​se​: ​triviatour_profiles_ms_prod​ ​deployed_in


​ee​: ​container_profiles_ms​(​execution_environment​ ​ASPNET_Core​)(​port​ ​5000​);

​se​: ​triviatour_profiles_db_prod​ ​deployed_in


​ee​: ​container_profiles_db​(​execution_environment​ ​mysql​)(​port​ ​3306​);

​se​: ​triviatour_questions_ms_prod​ ​deployed_in


​ee​: ​container_questions_ms​(​execution_environment​ ​puma​)(​port​ ​8080​);

​se​: ​triviatour_questions_db_prod​ ​deployed_in


​ee​: ​container_questions_db​(​execution_environment​ ​mysql​)(​port​ ​3306​);

​se​: ​triviatour_versus_ms_prod​ ​deployed_in


​ee​: ​container_versus_ms​(​execution_environment​ ​django​)(​port​ ​8990​);

​se​: ​triviatour_versus_db_prod​ ​deployed_in


​ee​: ​container_versus_db​(​execution_environment​ ​postgresql​)(​port​ ​5432​);

​se​: ​triviatour_proxy_prod​ ​deployed_in


​ee​: ​container_proxy​(​execution_environment​ ​nginx​)(​port​ ​8085​);

​se​: ​triviatour_api_gateway_prod​ ​deployed_in


​ee​: ​container_api_gateway​(​execution_environment​ ​nodejs​)(​port​ ​3000​);

​se​: ​triviatour_interface_prod​ ​deployed_in


​ee​: ​container_interface​(​execution_environment​ ​nodejs​)(​port​ ​3010​);

​se​: ​triviatour_wa_prod​ ​deployed_in


​ee​: ​container_wa​(​execution_environment​ ​nodejs​)(​port​ ​8000​);

​se​: ​triviatour_ma_prod​ ​deployed_in


​ee​: ​user_phone​;
}
::
}
}
2.5.3. Descripción de la Vista

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 

También podría gustarte