Skip to content

Use Cases

Este documento detalla los casos de uso implementados en el microservicio, describiendo su propósito, interfaces, flujo principal, reglas de negocio y excepciones.

Descripción: Busca un producto por su código EAN (European Article Number).

Interfaz de entrada:

interface FindProductByEanParams {
ean: string;
country: string;
warehouse: string;
}

Interfaz de salida:

interface ProductInfo {
id?: string;
sku: string;
ean: string;
name: string;
image?: string;
packagingLevels: PackagingLevel[];
measureInfo?: MeasureInfo;
categoryInfo?: CategoryInfo;
expectedDemand?: ExpectedDemand[];
statusInfo?: StatusInfo;
warehouseDemand: number;
}

Flujo principal:

  1. Valida y convierte los parámetros de entrada a objetos de valor del dominio (Country, Warehouse, Ean).
  2. Llama al método getByEan del servicio de productos.
  3. Si el producto no se encuentra, devuelve un error ProductNotFoundError.
  4. Si el producto se encuentra, lo devuelve como resultado exitoso.

Reglas de negocio:

  • El código EAN debe ser válido según las reglas de validación de EAN.
  • El país debe ser uno de los países soportados.
  • El almacén debe ser uno de los almacenes soportados.

Puertos y Adaptadores:

  • Puerto de Entrada: FindProductByEan (caso de uso)
  • Puerto de Salida: ProductService (interfaz del servicio)
  • Adaptador de Entrada: FindProductByEanController (controlador HTTP)
  • Adaptador de Salida: HttpProductApiService (implementación del servicio)

Excepciones:

  • ProductNotFoundError: Cuando no se encuentra un producto con el EAN especificado.
  • InvalidEanError: Cuando el EAN proporcionado no es válido.
  • InvalidCountryError: Cuando el país proporcionado no es válido.
  • InvalidWarehouseError: Cuando el almacén proporcionado no es válido.
  • ProductServiceError: Cuando ocurre un error en el servicio de productos.
  • UnexpectedError: Cuando ocurre un error inesperado.

Descripción: Busca múltiples productos por sus códigos EAN.

Interfaz de entrada:

interface FindProductByEansParams {
eans: string[];
country: string;
warehouse: string;
}

Interfaz de salida:

Either<BusinessError, ProductInfo[]>

Flujo principal:

  1. Valida y convierte los parámetros de entrada a objetos de valor del dominio.
  2. Llama al método getByEans del servicio de productos.
  3. Devuelve la lista de productos encontrados.

Reglas de negocio:

  • Cada código EAN debe ser válido según las reglas de validación de EAN.
  • El país debe ser uno de los países soportados.
  • El almacén debe ser uno de los almacenes soportados.

Puertos y Adaptadores:

  • Puerto de Entrada: FindProductByEans (caso de uso)
  • Puerto de Salida: ProductService (interfaz del servicio)
  • Adaptador de Entrada: FindProductByEansController (controlador HTTP)
  • Adaptador de Salida: HttpProductApiService (implementación del servicio)

Excepciones:

  • InvalidEanError: Cuando alguno de los EANs proporcionados no es válido.
  • InvalidCountryError: Cuando el país proporcionado no es válido.
  • InvalidWarehouseError: Cuando el almacén proporcionado no es válido.
  • ProductServiceError: Cuando ocurre un error en el servicio de productos.
  • UnexpectedError: Cuando ocurre un error inesperado.

Busca un producto por su ID.

Interfaz de entrada:

interface FindProductByIdParams {
id: string;
country: string;
warehouse: string;
}

Interfaz de salida:

interface ProductInfo {
id?: string;
sku: string;
ean: string;
name: string;
image?: string;
packagingLevels: PackagingLevel[];
measureInfo?: MeasureInfo;
categoryInfo?: CategoryInfo;
expectedDemand?: ExpectedDemand[];
statusInfo?: StatusInfo;
warehouseDemand: number;
}

Flujo principal:

  1. Valida y convierte los parámetros de entrada a objetos de valor del dominio.
  2. Llama al método getById del servicio de productos.
  3. Si el producto no se encuentra, devuelve un error ProductNotFoundError.
  4. Si el producto se encuentra, lo devuelve como resultado exitoso.

Reglas de negocio:

  • El ID debe ser un identificador válido.
  • El país debe ser uno de los países soportados.
  • El almacén debe ser uno de los almacenes soportados.

Puertos y Adaptadores:

  • Puerto de Entrada: FindProductById (caso de uso)
  • Puerto de Salida: ProductService (interfaz del servicio)
  • Adaptador de Entrada: FindProductByIdController (controlador HTTP)
  • Adaptador de Salida: HttpProductApiService (implementación del servicio)

Excepciones:

  • ProductNotFoundError: Cuando no se encuentra un producto con el ID especificado.
  • InvalidCountryError: Cuando el país proporcionado no es válido.
  • InvalidWarehouseError: Cuando el almacén proporcionado no es válido.
  • ProductServiceError: Cuando ocurre un error en el servicio de productos.
  • UnexpectedError: Cuando ocurre un error inesperado.

Busca múltiples productos por sus IDs.

Interfaz de entrada:

interface FindProductByIdsParams {
ids: string[];
country: string;
warehouse: string;
}

Interfaz de salida:

Either<BusinessError, ProductInfo[]>

Flujo principal:

  1. Valida y convierte los parámetros de entrada a objetos de valor del dominio.
  2. Llama al método getByIds del servicio de productos.
  3. Devuelve la lista de productos encontrados.

Reglas de negocio:

  • Cada ID debe ser un identificador válido.
  • El país debe ser uno de los países soportados.
  • El almacén debe ser uno de los almacenes soportados.

Puertos y Adaptadores:

  • Puerto de Entrada: FindProductByIds (caso de uso)
  • Puerto de Salida: ProductService (interfaz del servicio)
  • Adaptador de Entrada: FindProductByIdsController (controlador HTTP)
  • Adaptador de Salida: HttpProductApiService (implementación del servicio)

Excepciones:

  • InvalidCountryError: Cuando el país proporcionado no es válido.
  • InvalidWarehouseError: Cuando el almacén proporcionado no es válido.
  • ProductServiceError: Cuando ocurre un error en el servicio de productos.
  • UnexpectedError: Cuando ocurre un error inesperado.

Busca un producto por su código SKU (Stock Keeping Unit).

Interfaz de entrada:

interface FindProductBySkuParams {
sku: string;
country: string;
warehouse: string;
}

Interfaz de salida:

interface ProductInfo {
id?: string;
sku: string;
ean: string;
name: string;
image?: string;
packagingLevels: PackagingLevel[];
measureInfo?: MeasureInfo;
categoryInfo?: CategoryInfo;
expectedDemand?: ExpectedDemand[];
statusInfo?: StatusInfo;
warehouseDemand: number;
}

Flujo principal:

  1. Valida y convierte los parámetros de entrada a objetos de valor del dominio.
  2. Llama al método getBySku del servicio de productos.
  3. Si el producto no se encuentra, devuelve un error ProductNotFoundError.
  4. Si el producto se encuentra, lo devuelve como resultado exitoso.

Reglas de negocio:

  • El código SKU debe ser válido según las reglas de validación de SKU.
  • El país debe ser uno de los países soportados.
  • El almacén debe ser uno de los almacenes soportados.

Puertos y Adaptadores:

  • Puerto de Entrada: FindProductBySku (caso de uso)
  • Puerto de Salida: ProductService (interfaz del servicio)
  • Adaptador de Entrada: FindProductBySkuController (controlador HTTP)
  • Adaptador de Salida: HttpProductApiService (implementación del servicio)

Excepciones:

  • ProductNotFoundError: Cuando no se encuentra un producto con el SKU especificado.
  • InvalidSkuError: Cuando el SKU proporcionado no es válido.
  • InvalidCountryError: Cuando el país proporcionado no es válido.
  • InvalidWarehouseError: Cuando el almacén proporcionado no es válido.
  • ProductServiceError: Cuando ocurre un error en el servicio de productos.
  • UnexpectedError: Cuando ocurre un error inesperado.

Busca múltiples productos por sus códigos SKU.

Interfaz de entrada:

interface FindProductBySkusParams {
skus: string[];
country: string;
warehouse: string;
}

Interfaz de salida:

Either<BusinessError, ProductInfo[]>

Flujo principal:

  1. Válida y convierte los parámetros de entrada a objetos de valor del dominio.
  2. Llama al método getBySkus del servicio de productos.
  3. Devuelve la lista de productos encontrados.

Reglas de negocio:

  • Cada código SKU debe ser válido según las reglas de validación de SKU.
  • El país debe ser uno de los países soportados.
  • El almacén debe ser uno de los almacenes soportados.

Puertos y Adaptadores:

  • Puerto de Entrada: FindProductBySkus (caso de uso)
  • Puerto de Salida: ProductService (interfaz del servicio)
  • Adaptador de Entrada: FindProductBySkusController (controlador HTTP)
  • Adaptador de Salida: HttpProductApiService (implementación del servicio)

Excepciones:

  • InvalidSkuError: Cuando alguno de los SKUs proporcionados no es válido.
  • InvalidCountryError: Cuando el país proporcionado no es válido.
  • InvalidWarehouseError: Cuando el almacén proporcionado no es válido.
  • ProductServiceError: Cuando ocurre un error en el servicio de productos.
  • UnexpectedError: Cuando ocurre un error inesperado.