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.
Casos de Uso
Section titled “Casos de Uso”FindProductByEan
Section titled “FindProductByEan”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:
- Valida y convierte los parámetros de entrada a objetos de valor del dominio (Country, Warehouse, Ean).
- Llama al método
getByEandel servicio de productos. - Si el producto no se encuentra, devuelve un error
ProductNotFoundError. - 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.
FindProductByEans
Section titled “FindProductByEans”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:
- Valida y convierte los parámetros de entrada a objetos de valor del dominio.
- Llama al método
getByEansdel servicio de productos. - 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.
FindProductById
Section titled “FindProductById”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:
- Valida y convierte los parámetros de entrada a objetos de valor del dominio.
- Llama al método
getByIddel servicio de productos. - Si el producto no se encuentra, devuelve un error
ProductNotFoundError. - 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.
FindProductByIds
Section titled “FindProductByIds”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:
- Valida y convierte los parámetros de entrada a objetos de valor del dominio.
- Llama al método
getByIdsdel servicio de productos. - 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.
FindProductBySku
Section titled “FindProductBySku”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:
- Valida y convierte los parámetros de entrada a objetos de valor del dominio.
- Llama al método
getBySkudel servicio de productos. - Si el producto no se encuentra, devuelve un error
ProductNotFoundError. - 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.
FindProductBySkus
Section titled “FindProductBySkus”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:
- Válida y convierte los parámetros de entrada a objetos de valor del dominio.
- Llama al método
getBySkusdel servicio de productos. - 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.