Note

This version of the template contains some help and explanations. It is used for familiarization with arc42 and the understanding of the concepts. For documentation of your own system you use better the plain version.

1. Introducción

1.1. Introducción y objetivos

Este proyecto nace con el objetivo principal de construir una tienda online
que permita a los usuarios la compra de licores y bebidas espiritosas al
precio mas competitivo.
Como objetivos secundarios:
- aprendizaje de tecnologias como typescript, react, solid...
- mejorar nuestras habilidades sociales y de trabajo en equipo.
El principal objetivo es el de agrupar una gran variedad de bebidas alcoholicas
de la mejor calidad y al precio mas asequible. De esta forma cualquier persona
mayor de edad puede disfrutar de un trago agradable de forma cómoda.
Los requisitos funcionales son los típicos de cualquier tienda online común.
Principalmente:
- El sistema simulara una tienda online en la que los usuarios podran seleccionar y encargar bebidas alcoholicas.
- El sistema calculará los costes de envio en función de las caracteristicas del mismo.
- El sistema mostrará los costes finales y permitirá al usuario finalizar su compra
- El usuario podrá visualizar sus pedidos.
- El usuario podrá visualizar un catálogo de bebidas clasificadas en categorias.
- El administrador podrá añadir nuevos productos.
- El administrador podrá visualizar los pedidos realizados.

1.2. Atributos de calidad

Atributos Descripción

Usabilidad

Es de gran importancia que la aplicación sea entendida con gran facilidad con el objetivo principal de maximizar las ventas.

Disponibilidad

Tratandose de una tienda es fundamental que los servicios que esta ofrece estén disponibles el mayor tiempo posible.

Seguridad

La confidencialidad de los datos de nuestro clientes es una prioridad.

Testeabilidad

De cara al correcto desarrollo y funcionamiento, consideramos importante tener presente las pruebas en todas las etapas del trabajo y facilitar todo lo posible su construcción y uso.

1.3. Stakeholders

Role/Nombre Expectaciones

Profesores

Interesados en el desarrollo de la funcionalidad, arquitectura y documentación de la aplicación.

Clientes Potenciales

A los que va destinado el producto final y para los que van destinados los requisitos funcionales.

Miembros del grupo del desarrollo

Como estudiantes confiamos en mejorar nuestras habilidades sobre las tecnologías tratadas en este trabajo y obtener un resultado satisfactorio.

Otros estudiantes

Esperan una buena aplicación que puedan tomar como ejemplo y obtener información util que pueda ser reutilizada en proximos proyectos.

2. Requisitos de arquitectura

2.1. Restricciones técnicas

Restricción Explicación

Docker

Contenedores docker empleados para el despliegue de la aplicación.

Solid app

Tecnología fundamental para poder garantizar la confidencialidad de los datos manejados de forma que se conforma una red de persistencia descentralizada.

Typescript

Lenguaje de programacion empleado para la implementación de la lógica de negocio del sistema.

React

Es la librería que sera utilizada para la construcción del front-end del sistema.

Node.js

Es un entorno en tiempo de ejecución multiplataforma para la capa del servidor basado en el lenguaje de programación JavaScript

2.2. Organización

Restricción Explicación

Tiempo / planificación

El sistema debe de cumplir con los requisitos funcionales planteados antes de la última entrega de la asignatura. Asi como cumplir con las entregas parciales solicitadas.

Control de versiones

Como decisión impuesta se debe utilizar control de versiones con git para gestionar el desarrollo del proyecto.

Equipo fijo

El equipo es impuesto por la organización de la asignatura, tanto su tamaño como sus integrantes.

2.3. Normas

Restricción Explicación

Ley orgánica de protección de datos

A nivel de cumplimiento de la legislación española debemos tener especial cuidado en el trato de los datos sensibles de los usuarios de nuestra aplicación.

Idioma

Se empleará el idioma castellano tanto en la documentación como en la implementación de la aplicación aunque se podrá internacionalizar en un futuro._

Arc42

Como decisión impuesta debemos seguir esta plantilla para la realización de esta documentación.

3. System Scope and Context

3.1. Business Context

diagrama contexto negocio

3.1.1. Leyenda:

DeDe

Canal de comunicación entre el usuario y el sistema. El sistema muestra al usuario los productos disponibles que puede comprar.

Pod de Solid

El usuario contará con su propio Pod, donde almacenará su información personal. DeDe, con permiso del usuario, accederá a la misma para conocer sus datos personales.

Base de datos MongoDB

La base de datos MongoDB contendrá el catálogo de productos que ofrece DeDe.

Plataforma de pago

El sistema incluye una plataforma de pago (ficticia en nuestro caso) que permite llevar a cabo la compra de los productos deseados.

API envío

El sistema utilizará una API que permitirá al usuario escoger entre diferentes portadores.

3.2. Technical Context

La aplicación se basa en un sistema descentralizado para la cual se usó la tecnología SOLID que permite garantizar la confidencialidad de los datos manejados de forma que se conforma una red de persistencia descentralizada. Cada usuario es propietario de su información personal la cual se gestionará mediante un SOLID POD. De esta manera es el propio usuario el que decide qué datos son públicos o privados y con quien los comparte. Por temas de eficiencia algunos de los datos se guardarán en una base de datos, en este caso MongoDB.

La aplicación esta implementada utilizando el framework React, que es una biblioteca Javascript de código abierto diseñada para crear interfaces de usuario con el objetivo de facilitar el desarrollo de aplicaciones en una sola página, y Typescript, que es un superconjunto de JavaScript, que esencialmente añade tipos estáticos y objetos basados en clases.

4. Solución Estratégica

Tecnología Descripción

Typescript

Es un lenguaje de programación orientado a objetos, que permite crear aplicaciones web más dinámicas y escalables. Es una restricción del proyecto

React

Es una librería de JavaScript que permite crear interfaces de usuario sencillas y dinámicas. Es una restricción del proyecto

Node.js

Es un entorno de ejecución de JavaScript en un entorno de servidor. Es una restricción del proyecto

Boostrap

Es una librería de diseño de páginas web que nos permite crear interfaces de usuario sencillas y dinámicas.

SOLID

Es un proyecto de descentralización de datos en la web. Es una restricción del proyecto

Git

Es un sistema de control de versiones de software. Es una restricción del proyecto

GitHub

Es una plataforma de control de versiones Git. Es una restricción del proyecto

MongoDB

Es una base de datos NoSQL orientada a documentos.

Heroku

Es una colección de servicios de computación en la nube pública que en conjunto forman una plataforma de computación en la nube. La usamos para el despliegue de nuestra aplicación.

Shippo API

API que usamos para calcular el coste de los envíos.

5. Building Block View

05 building blocks

5.1. Nivel 1

En este nivel aparecen los grandes protagonistas de nuestro sistema.

Nombre Descripción

NoVendoAgua

Aplicación desarrollada con el propósito de que haga las veces de licorería online.

POD SOLID

El usuario almacenará su información confidencial aquí.

MongoDB

Servirá para almacenar información sobre los productos y pedidos de la tienda.

5.2. Nivel 2

Este nivel desglosa el módulo NoVendoAgua en dos subapartados.

Nombre Descripción

WebApp

Parte frontal de la aplicación. El usuario se conecta a ella y ésta le ofrece una vista del sistema.

RESTAPI

Encargada de la conexión con los sistemas de persistencia, así como de la lógica de negocio.

6. Vista en tiempo de ejecución

6.1. Regitsro de usuario

diagrama secuencia registro

6.2. Autentificación del usuario

diagrama secuencia log in

6.3. Filtrado de productos

diagrama secuencia filtro

6.4. Añadir productos al carrito

diagrama secuencia añadir carrito

6.5. Eliminar productos del carrito

diagrama secuencia eliminar carrito

6.6. Tramitar pedido

diagrama secuencia tramitarPedido final

7. Deployment View

7.1. Infrastructura Level 1

diagrama de despliegue 2

7.2. Objetivo

El objetivo de esta estructura de despliegue es conseguir un sistema descentralizado. Con las premisas de almacenar los mínimos datos de los usuarios, la privacidad de dicha información asi como la seguridad de la misma.

7.3. Calidad y/o Características de Actuación

Al tratarse de una tienda online, es nuestra prioridad producir un front-end que cuente con las caracteristicas de una aplicación usable. Además de un back-end que cumpla con los requisitos de calidad propuestos, asi como un minimo de rendimiento. Con el objetivo de desarrollar el condigo más limpio y eficiente posible usaremos codecov. Se trata de un software que permite monitorizar el codigo que esta siendo ejecutado en las pruebas y el que no. Asi se puede comprabar que elementos son los menos testeados para ponerle solución y mejorar la calidad del código.

7.4. Mapeo de bloques de construcción para infraestructura

Atributos Descripción

devices

son los dispositivos desde los que los usuarios pueden acceder a nuestra aplicación. Al tratarse de una aplicación web, los dispositivos podran ser cualquiera que pueda navegar por internet.

browsers

software que emplean los usuarios para visualizar el contenido de nuestra aplicación web. Deberá ser compatibles con los mas utilizados (Chrome, Firefox, Safari, Microsoft edge).

web server

es el servidor que dará host a nuestra aplicación web.

Base de datos

es la base de datos en la que persistiremos los datos de nuestra aplicación.

SOLID

Donde almacenaremos (de forma segura) los datos de los usuarios en PODs.

PODs

contendrá los datos de cada usuario concreto de forma que exitira un POD por usuario.

8. Conceptos transversales

8.1. Modelo de dominio

El usuario tendrá una lista de licores donde este podrá seleccionar los que desee, meterlos en un carrito y posteriormente acceder a la compra.

Una vez se acceda a la compra, el sistema calculará automaticamente los costes de envío utilizando la dirección del usuario, que se encontrará en su POD, y los costes de envío en relacion de la distancia del centro de distribución a la dirección del cliente.

El sistema mostrará el precio final y cuando el usuario acepte se registrará la venta y su envío.

Además la aplicación permitirá que los usuarios vean los pedidos realizados que tienen.

8.2. Experiencia de usuario

La aplicación sigue una interfaz simple y minimalista con la idea de que sea fácil e intuitiva de usar para los usuarios.

8.3. Internacionalización

La aplicación principalmente esta realizada en español aunque en un futuro se podría ampliar a más idiomas.

8.4. Seguridad y Privacidad

La seguridad y la privacidad es un objetivo muy importante de la aplicación. Se trata de tener una aplicación descentralizada gracias al uso de los PODs donde se almacenan los datos de los usuarios de forma privada y estos son los propietarios de sus propios datos y ellos mismos deciden a quién dar acceso.

Además de en los PODs también vamos a tener datos guardados en una base de datos MongoDB.

8.5. Pruebas

A medida de que la aplicación esté en funcionamiento y según se vaya actualizando vamos a realizar pruebas exhaustivas para asegurarnos de que todo esta funcionando correctamente.

9. Decisiones de diseño

  • El idioma de la documentación será el castellano, pues es el lenguaje nativo de los miembros del equipo y nos resultará más claro y comprensible en este idioma.

  • Uso de la bilbioteca Boostrap para la elaboración de las hojas de estilo de tal forma que nuestra aplicación resulte más atractiva visualmente para los usuarios.

  • Uso de la bilbioteca React Hot Toast con el objetivo de que el usuario sea máx consciente de las acciones que realiza a lo largo del tiempo que permanezca en la página mediante notificaciones.

  • Uso de la bilbioteca Yup para informar al usuario en el momento del login y registro la longitud y características mínimas que han de cumplir su nombre de usuario y contraseña.

  • Dado que nuestro proyecto será creado junto al proyecto Solid, algunos de nuestros datos serán almacenados en los Solid Pods. Junto a esto, la base de datos que utilizaremos será no relacional (documental), concretamente MongoDB en la nube. El principal motivo de esta decisión es la sinergia con la que cuenta esta base de datos con el lenguaje de desarrollo del proyecto.

  • La delegación del cálculo de costes de envío según las caracteristicas concretas de cada compra será delegada a Shippo. Mediante su API obtenemos datos del envio tales como los costes y la duración del mismo. Elegimos su API ya que solo nos pide dirección de origen, dirección de destino y poco más para proporcionarnos los datos de distintas compañias de reparto.

  • Uso de la plataforma Heroku para el despliegue de la aplicación. Elegida por tener un uso mas simple que sus alternativas y ser mas practico al darnos una ip estatica en contraposición con AWS. Tambien por la existencia de más ejemplos de despliegues de aplicaciones similares a la nuestra en esta plataforma.

  • Emplear los servicios de gestión de contenidos multimedia que proporciona la herramienta cloudinary. Esta decisión está motivada sobretodo por la mala experiencia subiendo las imagenes a Heroku. Por ello, y en adición a ahorranos la memoria que pueda ocupar el contenido multimedia de la aplicación, decidimos subir nuestras imagenes a la nube de cloudinary y accederlas mediante una URI.

10. Requerimientos de Calidad

10.1. Árbol de calidad

arbolCalidad

10.2. Escenarios de calidad

Atributos de Calidad Escenarios de Calidad Prioridad

Usabilidad

Los usuarios deben saber manejarse por la aplicación fácilmente con el objetivo de que comprar cualquier tipo de producto sea una tarea fácil y rápida. A pesar de esto, no necesitamos que sea muy elevado ya que se trata de un proyecto universitario, no va a ser usado por personas ajenas.

Baja

Privacidad

El objetivo principal que desemaos alcanzar es la protección de los datos de usuarios finales para así se llevar a cabo la descentralización de datos personales y con ello mejorar el nivel de privacidad de los usuarios.

Alta

Testeabilidad

Realización de pruebas unitarias, pruebas de aceptación y de carga para comprobar el correcto funcionamiento de la aplicación

Media

Robustez

La aplicación debe ser robusta para que los productos mantengan sus características únicas

Media

Rendimiento

El tiempo en que un usuario tarda en realziar alguna petición no los consideramos tan importante como pueden ser otros atributos. Aún así, si creemos que debemos proporcionar un rendimiento aceptable para que al usuario no le resulte largo y desaprovechado el tiempo que esté en nuestra aplicación

Baja

11. Riesgos y deuda técnica

Por una parte, entenderemos riesgos como aquellas circunstancias potenciales negativas que aún no han ocurrido. A continuación indicamos los riesgos identificados, así como medidas propuestas para paliarlos o mitigarlos.

Riesgo Medida propuesta

Uno o más miembros del equipo podrían abandonar la asignatura

Asignaremos varias personas a cada tarea, especialmente a las que resultan críticas

Carecemos de experiencia en las tecnologías incluídas en las restricciones

De forma paralela a desarrollar la documentación, realizaremos acciones formativas aprovechando la gran cantidad de recursos existentes en Internet

La entrega es en mayo de 2022 y puede que no lleguemos a tiempo

Celebraremos reuniones semanales donde analizar el estado actual del proyecto y ajustaremos el volumen de trabajo conforme a ello

Por otra parte, consideramos la deuda técnica como algo inevitable en nuestro proyecto. Por falta de conocimiento o por llegar apurados a un plazo puede que no siempre desarrollemos software óptimo. Para evitar que esto nos lastre en el futuro:

  • Volveremos frecuentemente sobre nuestro código, refactorizándolo siempre que sea necesario.

  • Llevaremos a cabo revisiones de código entre miembros del equipo por medio de la funcionalidad de pull requests de Github.

12. Glosario

Término

Definición

Solid

Proyecto de descentralización de datos en la web que permiten al usuario final decidir dónde se van a almacenar sus datos mejorando así la privacidad.

TypeScript

Lenguaje de programación libre y de código abierto desarrollado y mantenido por Microsoft. Es un superconjunto de JavaScript, que esencialmente añade tipos estáticos y objetos basados en clases.

React

Biblioteca Javascript de código abierto diseñada para crear interfaces de usuario con el objetivo de facilitar el desarrollo de aplicaciones en una sola página.

Stakeholder

Entidad que afecta, es afectado o puede contribuir al sistema y su arquitectura, entendiendose entidad como persona, organizacion, empresa, etc.

MongoDB

Sistema de base de datos NoSQL, orientado a documentos y de código abierto.MongoDB guarda estructuras de datos BSON (una especificación similar a JSON) con un esquema dinámico, haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida.

Docker

Conjunto de plataformas que utilizan la virtualización para entregar software en paquetes denominados contenedores.

Node.js

Entorno de tiempo de ejecución JavaScript de código abierto que ejecuta código JavaScript fuera de un navegador web.

POD

Los pods, personal online data stores, son como servidores web personales seguros para tus datos. Puedes almacenar cualquier tipo de información en un Pod de Solid, utilizando formatos y protocolos de datos estándar, abiertos e interoperables. Además, controlas el acceso a los datos de tu Pod y decides con quién quieres compartir qué datos. Puedes revocar el acceso en cualquier momento.

Bootstrap

Framework muy popular que facilita el desarrollo web ofreciendo clases predefinidas en CSS y JavaScript.

MongoDB

Base de datos documental.

Express

Es un marco de aplicación web de back-end para Node.js diseñado para crear aplicaciones web y API.

Shippo

Compañía de software estadounidense que ayuda a las empresas de comercio electrónico a integrar el envío con múltiples transportistas a través de su API y aplicación web.

Heroku

Heroku es una plataforma como servicio de computación en la Nube que soporta distintos lenguajes de programación.

Cloudinary

Cloudinary es una empresa de tecnología SaaS. La empresa ofrece servicios de gestión de imágenes y vídeos basados ​​en la nube.

About arc42

arc42, the Template for documentation of software and system architecture.

By Dr. Gernot Starke, Dr. Peter Hruschka and contributors.

Template Revision: 7.0 EN (based on asciidoc), January 2017

© We acknowledge that this document uses material from the arc 42 architecture template, http://www.arc42.de. Created by Dr. Peter Hruschka & Dr. Gernot Starke.