Skip to content

Architecture

Este documento describe la arquitectura implementada en el microservicio op-scanner.

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.

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
  • product/: Entities y lógica relacionada con productos
    • valueobjects/: Value objects como Ean
    • service.ts: Interfaz para el servicio de productos
    • errors.ts: Errores específicos de productos
  • location/: Entities y lógica relacionada con ubicaciones
    • valueobjects/: Value objects como LocationName
    • service.ts: Interfaz para el servicio de ubicaciones
  • container/: Entities y lógica relacionada con contenedores
    • valueobjects/: Value objects como ContainerName
    • service.ts: Interfaz para el servicio de contenedores
  • supply/: Entities y lógica relacionada con suministros
    • valueobjects/: Value objects como Barcode
    • service.ts: Interfaz para el servicio de suministros
  • scan.ts: Lógica de dominio central para la funcionalidad de escaneo
  • errors.ts: Errores comunes del dominio
  • valueobjects/: Value objects comunes como Country y Warehouse

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
  • usecase/: Implementación de casos de uso
    • scan.ts: El caso de uso principal para escanear texto e identificar entities
  • utils.ts: Funciones de utilidad para la capa de aplicación

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
  • http/: Implementación del servidor HTTP
    • controllers/: Controllers HTTP que manejan las solicitudes
    • routes/: Definiciones de rutas
    • middlewares/: Middlewares de Express
  • services/: Implementaciones de interfaces de servicio del dominio
    • product/: Implementación del servicio de productos
    • location/: Implementación del servicio de ubicaciones
    • container/: Implementación del servicio de contenedores
    • supply/: Implementación del servicio de suministros
  • providers/: Funciones factory para crear casos de uso y servicios
  • context/: Gestión del contexto de solicitud
  • logger/: Funcionalidad de registro
  1. Un cliente envía una solicitud GET a /scan/:text con un texto escaneado
  2. El servidor HTTP enruta la solicitud al ScanController
  3. El controller extrae el texto y el contexto (country, warehouse) de la solicitud
  4. El controller llama al caso de uso Scan con estos parámetros
  5. El caso de uso determina el tipo de entidad basado en el formato del texto
  6. El caso de uso llama al servicio apropiado para recuperar información de la entidad
  7. El servicio realiza solicitudes HTTP a APIs externas si es necesario
  8. El caso de uso devuelve la información de la entidad al controller
  9. El controller formatea la respuesta y la envía de vuelta al cliente