Skip to content

Architecture

Este documento describe la arquitectura implementada en el microservicio de Forklift, explicando las diferentes capas y cómo interactúan entre sí.

La capa de dominio contiene las entidades, objetos de valor, reglas de negocio y puertos (interfaces) que definen el comportamiento del sistema. Esta capa es independiente de cualquier tecnología o framework específico.

  • Entidades: Representan los objetos principales del dominio con identidad y ciclo de vida

    • Container: Representa un contenedor físico en el almacén
    • Location: Representa una ubicación en el almacén
    • PalletMovement: Representa el movimiento de un pallet
    • User: Representa un usuario del sistema
  • Objetos de Valor: Objetos inmutables que representan conceptos del dominio

    • ContainerName: Nombre de un contenedor
    • LocationName: Nombre de una ubicación
    • Username: Nombre de usuario
    • Country: País de operación
    • Warehouse: Almacén específico
  • Puertos (Interfaces): Definen los contratos para servicios externos

    • ContainerService: Interfaz para el servicio de contenedores
    • LocationService: Interfaz para el servicio de ubicaciones
    • UserService: Interfaz para el servicio de usuarios
    • RestockingService: Interfaz para el servicio de reabastecimiento
  • Errores de Dominio: Errores específicos del dominio

    • ContainerNotFoundError: Error cuando no se encuentra un contenedor
    • LocationNotFoundError: Error cuando no se encuentra una ubicación
    • UnauthorizedUserError: Error cuando un usuario no está autorizado

La capa de aplicación orquesta los flujos de trabajo de la aplicación utilizando las entidades y servicios del dominio. Implementa los casos de uso de la aplicación y coordina la interacción entre los diferentes componentes del dominio.

  • Casos de Uso: Implementan las operaciones específicas que puede realizar el sistema

    • PalletLiftUseCase: Caso de uso para levantar un pallet con un montacargas
    • PalletDropUseCase: Caso de uso para depositar un pallet en una ubicación
    • PalletFilterUseCase: Caso de uso para filtrar pallets según criterios
  • DTOs (Data Transfer Objects): Objetos para transferir datos entre capas

    • Objetos de entrada y salida para los casos de uso
  • Utilidades de Aplicación: Funciones auxiliares para la capa de aplicación

    • error-handler.ts: Manejo centralizado de errores
    • calendar.ts: Utilidades para manejo de fechas y horas
    • utils.ts: Funciones de utilidad general

La capa de infraestructura implementa los adaptadores que conectan la aplicación con el mundo exterior, como bases de datos, servicios web, frameworks, etc. Esta capa traduce las interfaces del dominio a las tecnologías específicas utilizadas.

  • Controladores HTTP: Manejan las peticiones HTTP y las traducen a llamadas a casos de uso

    • Controladores para operaciones de pallets
  • Adaptadores de Servicios Externos: Implementan las interfaces del dominio para servicios externos

    • HttpContainerService: Implementación del servicio de contenedores
    • HttpLocationService: Implementación del servicio de ubicaciones
    • HttpUserService: Implementación del servicio de usuarios
    • HttpRestockingService: Implementación del servicio de reabastecimiento
  • Repositorios: Implementan el acceso a datos

    • Implementaciones de repositorios para MongoDB
  • Middlewares: Componentes para procesar peticiones HTTP

    • auth-autofill.ts: Middleware para autocompletar información de autenticación
    • error-logging.ts: Middleware para logging de errores
  • Proveedores: Configuración de servicios externos

    • mongodb.ts: Configuración de conexión a MongoDB
  • Validadores: Validación de datos de entrada

    • Implementaciones de validadores usando Zod
  • Servicios de Infraestructura: Servicios específicos de infraestructura

    • logger: Servicio de logging
    • metric: Servicio de métricas