Conceptos Transversales (Cross cutting) - Pharsat/Granny GitHub Wiki
Modelo de dominio
Tablas
Nombre | Descripción |
---|---|
Product | Almacena la información única del producto, básicamente es el código único del producto y su nombre. |
Price | Es la tabla mas relevante, en ella se encuentra la composición entre el valor y la ubicación del producto, se añade la fecha y el usuario quien registra para tener capacidad de seguimiento. |
Usuario | Una tabla simple con la información del usuario, esta tabla se encuentra en otro repositorio de datos, se debe garantizar la integridad del UserId de la BD productos con el UserId de la DB de usuarios. |
Domain Model
Nombre | Descripción |
---|---|
Product | Es la entidad central, podrá ser instanciada mediante la consulta de un producto especifico o mediante la consulta de la lista de productos de una ubicación específica, cada producto puede obtener la lista de valores del mismo producto para que el usuario pueda tener un criterio de evaluación. La lista de subvalores no se cargará por defecto. |
Location | Esta entidad agrupa al producto por una localización en común. Muchos productos pueden estar en un almacén de cadena y un producto puede estar en varios almacenes de cadena con diferente precio. |
Métodos importantes para el negocio
Nombre | Descripción |
---|---|
getProductById | Obtiene la información de un producto de menor valor por el código único de producto. |
getProductsByLocation | Obtiene la información de los productos de menor valor que tengan la ubicación especificada. |
getValueNearestProducts | Obtiene la información de los productos con mayor valor que el producto de referencia. |
postProduct | Inserta un producto en la BD. |
Persistencia
Granny usara dos motores de base de datos, uno relacional para el almacenamiento de información de productos y otro no relacional para el almacenamiento de la información de usuario, la decisión está basada en el análisis del teorema CAP del cual se ha hablado previamente en el documento.
El acceso a la base de datos de producto se realizará desde los API de consulta y registro de producto, mientras que el la de usuarios se realizara desde el API de seguridad.
Interfaz de usuario
La interfaz de usuario predeterminada para Granny que se empaqueta dentro del artefacto final es una aplicación SPA (Single page application) escrita en JavaScript usando Ionic junto con una plantilla Bootstrap predeterminada. Para usar los servicios de ubicación, y autenticación se usaran los servicios e interfaces de google.
Optimización de JavaScript y CSS
Procesamiento de transacciones
EntityFramework middleware con .NetCore provee el bus necesario para implementar las transacciones a través del método SaveChanges para el caso de la base de datos relacional. En el caso de mongo DB solo se verificara la existencia del usuario ya creado recibiendo el hash con el id único de registro
Manejo de sesión
Solo el API de seguridad manejara sesión en el servidor para sostener los Token de autenticación de aplicación, la sesión estará basada en .NetCore Session Middleware.
Seguridad
Como se ha expuesto en la vista de ejecución granny contara con un esquema que brinda seguridad en cuanto a los agentes autorizados para realizar peticiones a las API, la autenticación solo será necesaria si se desea registrar un producto y se solicitara al usuario a través del API de google.
Seguridad física
No se ha considerado algún aspecto de seguridad relevante para la salud del usuario.
Comunicaciones e integración
Granny usará protocolos de comunicación basados en Https a través de internet, no se garantizará la consistencia de la funcionalidad si se rompe el hilo de la comunicación cuando se usa internet y este falla. Así mismo la disponibilidad dependerá únicamente de la disponibilidad del servicio en la nube de Azure en conjunto con la disponibilidad de internet del usuario.
Verificaciones de plausibilidad y validez
Los tipos de datos y los rangos se verifican mediante anotaciones en las clases que representan los Modelos de dominio. Esas clases están directamente vinculadas a interfaces REST externas.
Las siguientes son las validaciones importantes para el negocio:
- Los productos solo pueden ser ingresados si:
- Tienen nombre
- Tienen valor
- El valor no existe para ese producto en la BD
- Tiene una ubicación asociada
- El CUP fue leído a través del código de barras físico de un producto.
- El usuario que ingresa se encuentra autenticado con la API de google.
Manejo de excepción
Los manejos de excepción se darán implementando los códigos genéricos de comunicación REST existentes en el framework .NetCore (códigos 40X.X).
Las excepciones no controladas no serán auditadas, sin embargo, la aplicación será amigable con el usuario dejándole saber que ha sucedido un fallo en la operación y reiniciando la actividad actual en la que se encontraba el usuario.
Configuraciones
Internacionalización
El único idioma válido será español, la única divisa valida para los valores de productos será el Peso colombiano (COP).
Migración
Granny es la primera versión de una app de su tipo.
Capacidad de pruebas
Los API contendrán pruebas unitarias y de integración.
No se estima agregar una capa de pruebas funcionales más allá de evidencias en su etapa productiva ya que se sale del scope del ejercicio académico.
Gestión de construcción
Granny será construido usando los siguientes compiladores:
- .NetCore a través de Docker
- Ionic a través de Cordova
- Despliegue de scripts de creación de objetos relaciones SQL