Architecture
Este documento describe la arquitectura implementada en el microservicio op-scanner.
Arquitectura
Section titled “Arquitectura”El microservicio op-scanner sigue una arquitectura hexagonal (también conocida como puertos y adaptadores) con tres capas principales: domain, application e infrastructure. Esta arquitectura promueve la separación de responsabilidades, la facilidad de pruebas y el mantenimiento.
Capa de Dominio
Section titled “Capa de Dominio”La capa de dominio es el núcleo de la aplicación y contiene la lógica de negocio. Esta capa define:
- Entities: Objetos que tienen una identidad y un ciclo de vida (Product, Location, Container, Supply)
- Value Objects: Objetos inmutables que representan conceptos del dominio (Ean, LocationName, ContainerName, Barcode)
- Domain Services: Servicios que operan sobre múltiples entities o value objects
- Domain Errors: Tipos de error personalizados específicos del dominio
- Repositories Interfaces: Contratos para el acceso a datos
Componentes Principales
Section titled “Componentes Principales”product/: Entities y lógica relacionada con productosvalueobjects/: Value objects como Eanservice.ts: Interfaz para el servicio de productoserrors.ts: Errores específicos de productos
location/: Entities y lógica relacionada con ubicacionesvalueobjects/: Value objects como LocationNameservice.ts: Interfaz para el servicio de ubicaciones
container/: Entities y lógica relacionada con contenedoresvalueobjects/: Value objects como ContainerNameservice.ts: Interfaz para el servicio de contenedores
supply/: Entities y lógica relacionada con suministrosvalueobjects/: Value objects como Barcodeservice.ts: Interfaz para el servicio de suministros
scan.ts: Lógica de dominio central para la funcionalidad de escaneoerrors.ts: Errores comunes del dominiovalueobjects/: Value objects comunes como Country y Warehouse
Capa de Aplicación
Section titled “Capa de Aplicación”La capa de aplicación orquesta el flujo de datos entre el mundo exterior y el dominio. Contiene los casos de uso de la aplicación, que representan las operaciones que el sistema puede realizar. Esta capa:
- Coordina las entities del dominio para realizar tareas específicas
- Implementa lógica de negocio que involucra múltiples entities del dominio
- Define puertos de entrada y salida para la aplicación
- Maneja preocupaciones transversales como validación y manejo de errores
Componentes Principales
Section titled “Componentes Principales”usecase/: Implementación de casos de usoscan.ts: El caso de uso principal para escanear texto e identificar entities
utils.ts: Funciones de utilidad para 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. Esta capa:
- Implementa integraciones con servicios externos
- Proporciona controllers HTTP y rutas
- Gestiona el contexto de solicitud y middleware
- Maneja la configuración y variables de entorno
- Implementa registro y manejo de errores
Componentes Principales
Section titled “Componentes Principales”http/: Implementación del servidor HTTPcontrollers/: Controllers HTTP que manejan las solicitudesroutes/: Definiciones de rutasmiddlewares/: Middlewares de Express
services/: Implementaciones de interfaces de servicio del dominioproduct/: Implementación del servicio de productoslocation/: Implementación del servicio de ubicacionescontainer/: Implementación del servicio de contenedoressupply/: Implementación del servicio de suministros
providers/: Funciones factory para crear casos de uso y servicioscontext/: Gestión del contexto de solicitudlogger/: Funcionalidad de registro
Flujo de Solicitud
Section titled “Flujo de Solicitud”- Un cliente envía una solicitud GET a
/scan/:textcon un texto escaneado - El servidor HTTP enruta la solicitud al ScanController
- El controller extrae el texto y el contexto (country, warehouse) de la solicitud
- El controller llama al caso de uso Scan con estos parámetros
- El caso de uso determina el tipo de entidad basado en el formato del texto
- El caso de uso llama al servicio apropiado para recuperar información de la entidad
- El servicio realiza solicitudes HTTP a APIs externas si es necesario
- El caso de uso devuelve la información de la entidad al controller
- El controller formatea la respuesta y la envía de vuelta al cliente