Architecture
Este microservicio está implementado siguiendo los principios de la arquitectura hexagonal (también conocida como arquitectura de puertos y adaptadores). Esta arquitectura permite separar claramente las responsabilidades y facilita la prueba y el mantenimiento del código.
Arquitectura
Section titled “Arquitectura”Capa de Dominio
Section titled “Capa de Dominio”La capa de dominio contiene las entidades centrales del negocio, reglas de negocio, y definiciones de interfaces que representan las operaciones fundamentales del sistema. Esta capa es independiente de cualquier tecnología o framework específico.
Componentes Principales
Section titled “Componentes Principales”- Entidades: Representan los conceptos centrales del negocio.
ProductInfo: Entidad principal que contiene la información de un producto.
- Value Objects: Objetos inmutables que representan conceptos del dominio.
Ean: Representa un código EAN (European Article Number).Sku: Representa un código SKU (Stock Keeping Unit).Country: Representa un país.Warehouse: Representa un almacén.
- Interfaces de Servicios: Definen los contratos para operaciones del dominio.
ProductService: Define las operaciones disponibles para productos (getById, getByEan, getBySku, etc.).
- Errores del Dominio: Errores específicos del dominio.
BusinessError: Error base para errores de negocio.ProductError: Errores específicos de productos.
Capa de Aplicación
Section titled “Capa de Aplicación”La capa de aplicación contiene los casos de uso de la aplicación. Orquesta el flujo de datos hacia y desde las entidades del dominio, y coordina la lógica de negocio de alto nivel.
Componentes Principales
Section titled “Componentes Principales”- Casos de Uso: Implementan la lógica de negocio específica de la aplicación.
FindProductByEan: Busca un producto por su código EAN.FindProductByEans: Busca múltiples productos por sus códigos EAN.FindProductById: Busca un producto por su ID.FindProductByIds: Busca múltiples productos por sus IDs.FindProductBySku: Busca un producto por su código SKU.FindProductBySkus: Busca múltiples productos por sus códigos SKU.
- Manejadores de Errores: Procesan y transforman errores.
error-handler.ts: Maneja errores en la capa de aplicación.
Capa de Infraestructura
Section titled “Capa de Infraestructura”La capa de infraestructura proporciona implementaciones concretas de las interfaces definidas en el dominio. Se encarga de la comunicación con sistemas externos, bases de datos, frameworks, y otros detalles técnicos.
Componentes Principales
Section titled “Componentes Principales”- Controladores HTTP: Manejan las peticiones HTTP y convierten los datos entre el formato HTTP y el formato del dominio.
- Controladores para cada caso de uso (FindProductByEanController, etc.).
- Servicios Externos: Implementaciones concretas de las interfaces de servicio del dominio.
HttpProductApiService: Implementación del ProductService que se comunica con la Product API.- Servicios para comunicarse con BodegaO MX, BR, y PE.
- Middleware: Componentes que procesan las peticiones HTTP antes de llegar a los controladores.
- Validadores de peticiones.
- Manejadores de errores HTTP.
- Configuración: Configuración de la aplicación y sus dependencias.
- Configuración del servidor HTTP.
- Configuración de clientes HTTP.
- Logging: Implementación de logging para la aplicación.
logger: Servicio de logging.
- Caché: Mecanismos de caché para mejorar el rendimiento.
- Implementaciones de caché para respuestas de servicios externos.