Documentación - HazelMartinez/Microservices GitHub Wiki

Breve descripción del problema

Planificación y administración del proyecto.

Lista de features e historias de usuario identificados de la especificación.

Yo como administrador quiero que el DockerFile de MySQL debe de especificar un script para ejecutar los DDLs para crear la estructura de la base de datos.

Yo como administrador quiero que DockerHub provea las imágenes de MySQL y Liberty para tener una aplicación eficiente.

Yo como administrador quiero que FileStorage API se componga de dos componentes: la base de daots y el Liberty que se ejecuta para el API de Java para tener una aplicación conformada de manera correcta.

Yo como administrador quiero que el componente de FileSotorage API sea un microservicio que interactúa con un motor de bases de datos MySQL para un optimo almacenamiento de los datos.

Yo como administrador quiero que la compresión del stream de datos sea realizada con por el algoritmo de Huffman para la compresión sin perdida de datos.

Yo como administrador quiero que el microservicio de compresión se le envié un stream de datos para que lo retorne comprimido.

Yo como usuario quiero que el microservicio de compresión se ejecute en un Spring Boot para que se utilice la mínima cantidad de recursos.

Yo como administrador quiero que la aplicación web se comunique con el componente de autorización y autenticación por HTTP para que sea una aplicación segura.

Yo como administrador quiero que el componente de autenticación y autorización se alimente de un XML con los usuario y sus permisos para almacenar los datos de forma legible.

Yo como administrador quiero que el componente de autenticacion y autorización sea un REST API que se ejecuta en NodeJS.

Yo como administrador quiero que la interfaz gráfica se utilice los componentes de material UI de Google para React para que se vea agradable.

Yo como usuario quiero que el archivo se comprima con el microservicio de compresión para hacer un correcto uso de memoria.

Yo como usuario quiero que el archivo se guarde con su metadata en la base de datos para que los datos permanezcan en la aplicación.

Yo como administrador quiero que solo los usuarios que tengan permisos puedan subir archivos para tener una mejor experiencia de usuario.

Yo como administrador quiero un sistema de login para los usuarios para tener una buena experiencia de usuario.

Yo como administrador quiero un componente de autorización y autenticación para darle una aplicación segura al usuario.

Yo como usuario quiero que la metadata contenga: nombre, descripción, fecha de creación, ultima actualización y usuario que lo crea para que los datos sean guardados de manera ordenada y con su respectiva información

Yo como usuario quiero descargar archivos con su metadata

Yo como usuario quiero subir archivos con su metadata

Yo como usuario quiero una tabla donde se visualicen los archivos almacenados en la base de datos para como usuario poder visualizar lo que he almacenado

Yo como usuario quiero que la aplicacion web sea escrita en React JS para enviar solicitudes al servidor.

Yo como usuario quiero que el web application sea con Apache Httpd para interactuar con las solicitudes del cliente

Distribución de historias de usuario por criticalidad.

Minimal System Spam

Plan de iteraciones que agrupen cada bloque de historias de usuario de forma que se vea un desarrollo incremental.

Iteración 1

Yo como administrador quiero que el web application sea con Apache Httpd para interactuar con las solicitudes del cliente.

Yo como usuario quiero que la metadata contenga: nombre, descripción, fecha de creación, ultima actualización y usuario que lo crea para que los datos sean guardados de manera ordenada y con su respectiva información

Yo como administrador quiero un sistema de login para los usuarios para tener una buena experiencia de usuario VISUAL

Yo como administrador quiero que la interfaz gráfica se utilice los componentes de material UI de Google para React

Yo como usuario quiero que el microservicio de compresión se ejecute en un Spring Boot para que se utilice la mínima cantidad de recursos.

Yo como administrador quiero que el microservicio de compresión se le envié un stream de datos para que lo retorne comprimido.

Iteración 2

Yo como usuario quiero que la aplicacion web sea escrita en React JS para enviar solicitudes al servidor.

Yo como usuario quiero una tabla donde se visualicen los archivos almacenados en la base de datos para como usuario poder visualizar lo que he almacenado.

Yo como administrador quiero que solo los usuarios que tengan permisos puedan subir archivos para tener una mejor experiencia de usuario.

Yo como usuario quiero que el archivo se guarde con su metadata en la base de datos para que los datos permanezcan en la aplicación.

Yo como usuario quiero que el archivo se comprima con el microservicio de compresión para hacer un correcto uso de memoria.

Yo como administrador quiero que el componente de autenticacion y autorización sea un REST API que se ejecuta en NodeJS.

Yo como administrador quiero que la compresión del stream de datos sea realizada con por el algoritmo de Huffman para la compresión sin perdida de datos.

Yo como administrador quiero que DockerHub provea las imágenes de MySQL y Liberty para tener una aplicación eficiente.

Iteración 3

Yo como administrador quiero que el componente de FileSotorage API sea un microservicio que interactúa con un motor de bases de datos MySQL para un optimo almacenamiento de los datos.

Yo como usuario quiero subir archivos con su metadata.

Yo como usuario quiero descargar archivos con su metadata.

Yo como administrador quiero un componente de autorización y autenticación para darle una aplicación segura al usuario.

Yo como administrador quiero que el componente de autenticación y autorización se alimente de un XML con los usuario y sus permisos para almacenar los datos de forma legible.

Yo como administrador quiero que la aplicación web se comunique con el componente de autorización y autenticación por HTTP para que sea una aplicación segura.

Yo como administrador quiero que FileStorage API se componga de dos componentes: la base de daots y el Liberty que se ejecuta para el API de Java para tener una aplicación conformada de manera correcta.

Yo como administrador quiero que el DockerFile de MySQL debe de especificar un script para ejecutar los DDLs para crear la estructura de la base de datos.

Descomposición de cada user story en tareas.

Historia: Yo como administrador quiero que el DockerFile de MySQL debe de especificar un script para ejecutar los DDLs para crear la estructura de la base de datos.

Tareas

  • Creacion de script para la estructura de la base de datos.
  • Ejecucion de los DDLs con el script.

Historia: Yo como administrador quiero que DockerHub provea las imágenes de MySQL y Liberty para tener una aplicación eficiente.

Tareas

  • Configuración de DockerHub
  • Obtener imágenes de DockerHub
  • Configuración de Liberty

Historia: Yo como administrador quiero que FileStorage API se componga de dos componentes: la base de datos y el Liberty que se ejecuta para el API de Java para tener una aplicación conformada de manera correcta.

Tareas

  • Configuración de la base de datos
  • Configurar Liberty

Historia: Yo como administrador quiero que el componente de FileSotorage API sea un microservicio que interactúa con un motor de bases de datos MySQL para un optimo almacenamiento de los datos.

Tareas

  1. Configuración de la base de datos MySQL.
  2. Configuración de la tabla para el almacenamiento de datos en la base
  3. Configuración de script para la obtención de datos de la base

Historia: Yo como administrador quiero que la compresión del stream de datos sea realizada con por el algoritmo de Huffman para la compresión sin perdida de datos.

Tareas

  • Creación de algoritmo de compresión.
  • Creación del stream que se desea comprimir.
  • Guardado del diccionario de que se forma cuando se aplica el algoritmo al stream

Historia: Yo como administrador quiero que el microservicio de compresión se le envié un stream de datos para que lo retorne comprimido.

Tareas

  • Creación del stream para comprimir
  • Envío de stream para comprimir

Historia:Yo como usuario quiero que el microservicio de compresión se ejecute en un Spring Boot para que se utilice la mínima cantidad de recursos.

Tareas

  • Creación del Spring Boot
  • Configuración de los recursos a usar por el Spring Boot
  • Ejecución del algoritmo de compresión en Spring Boot

Historia: Yo como administrador quiero que la aplicación web se comunique con el componente de autorización y autenticación por HTTP para que sea una aplicación segura.

Tareas

  • Creación del método de autorización
  • Creación del método de autenticación
  • Comunicación por HTTP

Historia: Yo como administrador quiero que el componente de autenticación y autorización se alimente de un XML con los usuario y sus permisos para almacenar los datos de forma legible.

Tareas

  • Almacenamiento en XML de los usuarios
  • Guardar los permisos de cada usuario en el archivo XML
  • Cargar el archivo XML que contiene a los usuarios cuando se ejecute el componente de autenticación y autorización.

Historia: Yo como administrador quiero que el componente de autenticacion y autorización sea un REST API que se ejecuta en NodeJS.

Tareas

  • Creación del REST API con el componente de autenticacion y autorización.
  • Ejecución del REST API en Node JS.

Historia: Yo como administrador quiero que la interfaz gráfica se utilice los componentes de material UI de Google para React para que se vea agradable.

Tareas

  • Configuración de los componentes de UI de Google
  • Uso de React parala interfaz

Historia: Yo como usuario quiero que el archivo se comprima con el microservicio de compresión para hacer un correcto uso de memoria.

Tareas

  • Administración de la memoria del sistema.
  • Creación del microservicio de compresión

Historia: Yo como usuario quiero que el archivo se guarde con su metadata en la base de datos para que los datos permanezcan en la aplicación.

Tareas

  • Guardado de la metadata
  • Guardado del archivo
  • Interfaz para el ingreso de la metadata

Historia: Yo como administrador quiero que solo los usuarios que tengan permisos puedan subir archivos para tener una mejor experiencia de usuario.

Tareas

  • Registro de usuarios
  • Registro de permisos de cada usuario
  • Verificación cuando se sube un archivo

Historia: Yo como administrador quiero un sistema de login para los usuarios para tener una buena experiencia de usuario.

Tareas

  • Creación del login
  • Verificación de datos del login

Historia: Yo como administrador quiero un componente de autorización y autenticación para darle una aplicación segura al usuario.

Tareas

  • Creación del componente de autorización y autenticación
  • Solicitud de datos al usuarios
  • Verificación de datos

Historia: Yo como usuario quiero que la metadata contenga: nombre, descripción, fecha de creación, ultima actualización y usuario que lo crea para que los datos sean guardados de manera ordenada y con su respectiva información

Tareas

  • Guardado de datos de que ingresa el usuario
  • Creación de donde se guarda la metadata

Historia: Yo como usuario quiero descargar archivos con su metadata

Tareas

  • Selección del archivo a descargar
  • Recuperación del archivo

Historia: Yo como usuario quiero subir archivos con su metadata

Tareas

  • Selección de archivos
  • Agregar metadata
  • Agregar quien lo subió
  • Agregar fecha de actualización
  • Guardar archivo

Historia: Yo como usuario quiero una tabla donde se visualicen los archivos almacenados en la base de datos para como usuario poder visualizar lo que he almacenado

Tareas

  • Visualizador de archivos
  • Visualizador de metadata

Historia: Yo como usuario quiero que la aplicacion web sea escrita en React JS para enviar solicitudes al servidor.

Tareas

  • Creación de aplicación web
  • Verificación de solicitudes

Historia: Yo como usuario quiero que el web application sea con Apache Httpd para interactuar con las solicitudes del cliente

Tareas

  • Comunicación por Apache
  • Solicitudes por Httpd

Asignación de tareas a cada miembro del equipo.

Gabriel

Yo como administrador quiero que el web application sea con Apache Httpd para interactuar con las solicitudes del cliente.

Yo como administrador quiero un sistema de login para los usuarios para tener una buena experiencia de usuario VISUAL.

Yo como usuario quiero que el microservicio de compresión se ejecute en un Spring Boot para que se utilice la mínima cantidad de recursos.

Yo como administrador quiero que la compresión del stream de datos sea realizada con por el algoritmo de Huffman para la compresión sin perdida de datos.

Jonathan

Yo como administrador quiero que DockerHub provea las imágenes de MySQL y Liberty para tener una aplicación eficiente.

Yo como administrador quiero que FileStorage API se componga de dos componentes: la base de daots y el Liberty que se ejecuta para el API de Java para tener una aplicación conformada de manera correcta.

Yo como administrador quiero que el componente de FileSotorage API sea un microservicio que interactúa con un motor de bases de datos MySQL para un optimo almacenamiento de los datos.

Gabriel & Jonathan

Yo como usuario quiero subir archivos con su metadata

Yo como usuario quiero descargar archivos con su metadata

Yo como usuario quiero que la metadata contenga: nombre, descripción, fecha de creación, ultima actualización y usuario que lo crea para que los datos sean guardados de manera ordenada y con su respectiva información.

Yo como administrador quiero que solo los usuarios que tengan permisos puedan subir archivos para tener una mejor experiencia de usuario.

Yo como usuario quiero que el archivo se guarde con su metadata en la base de datos para que los datos permanezcan en la aplicación.

Hazel

Yo como usuario quiero una tabla donde se visualicen los archivos almacenados en la base de datos para como usuario poder visualizar lo que he almacenado.

Yo como administrador quiero un componente de autorización y autenticación para darle una aplicación segura al usuario.

Yo como administrador quiero que el componente de autenticacion y autorización sea un REST API que se ejecuta en NodeJS.

Yo como administrador quiero que el componente de autenticación y autorización se alimente de un XML con los usuario y sus permisos para almacenar los datos de forma legible.

Yo como administrador quiero que la aplicación web se comunique con el componente de autorización y autenticación por HTTP para que sea una aplicación segura.

Yo como administrador quiero que el DockerFile de MySQL debe de especificar un script para ejecutar los DDLs para crear la estructura de la base de datos

Diseño

Modelo de dominio

Diagrama de clases

Diagrama de arquitectura

Implementación

Descripción de las estructuras de datos desarrolladas.

XML

XML es un lenguaje estructurado que permite organizar datos, en el proyecto es utilizado para obtener la información de los usuarios. Este XML representa los datos de manera estructurada de modo que esta información sea procesada para realizar la validación y autenticación de los usuarios.

Lista Enlazada simple

Esta lista se basa en que cada nodo (elemento) contiene un único enlace que lo conecta al nodo siguiente o nodo sucesor. Es utilizada para guardar todos los datos en la base de datos para mostrarlo.

Descripción de los algoritmos desarrollados.

Algoritmo de compresion de huffman

Este algoritmo comprime un entrda de texto creando un archivo que contiene un diccionario con lo caracteres y los valores de 1 y 0; y el archivo ya convertido en la cadena de unos y ceros que esta cadena se convierten en bit y que despues se agrupan en bytes.

Base 64

Para poder comprimir cuaquier archivo se utiliza codificacion base 64, donde primero se conviete el archivo en binario y este se codifica en esta base y el resultado se entrga al compresor de huffman para que este comprima la codifica en un diccionario de maximo 64 caracteres. Para obtener el archivo original se descodifica la cadena de texto. A parte la base 64 utiliza caracteres alfanumerico y dos adicionales.


Problemas encontrados en forma de bugs de github.

Ver en Issues

Lecciones aprendidas.

Definir cada semana un punto de revisión, para ver los avances de cada colaborador. Unir las cosas con tiempo. Realizar los consejos del profesor sobre el manejo del trabajo en grupo. Trabajar en la comunicación.