using DomainResults.Common; using DataProviders.Collections; using Core.Abstractions; using WeatherForecast.Models.Responses; using DomainObjects.Documents; using DomainObjects.Enumerations; namespace WeatherForecast.Services { /// /// /// public interface IShopCartItemsService { /// /// /// /// /// /// (List?, IDomainResult) Get(List cartItems, string? locale); } /// /// /// public class ShopCartItemsService : ServiceBase, IShopCartItemsService { private readonly IShopCatalogDataProvider _shopCatalogDataProvider; private readonly IShopCartDataProvider _shopCartDataProvider; /// /// /// /// /// /// public ShopCartItemsService( ILogger logger, IShopCatalogDataProvider shopCatalogDataProvider, IShopCartDataProvider shopCartDataprovider ) : base(logger) { _shopCatalogDataProvider = shopCatalogDataProvider; _shopCartDataProvider = shopCartDataprovider; } /// /// /// /// /// /// public (List?, IDomainResult) Get(List cartItems, string? locale) { var items = new List(); foreach (var cartItem in cartItems) { var (item, result) = _shopCatalogDataProvider.Get(cartItem.Id, cartItem.Sku); if (!result.IsSuccess || item == null) { var delteResult = _shopCartDataProvider.Delete(cartItem.Id); if (!delteResult.IsSuccess) return (null, delteResult); } else items.Add(new ShopCartItemResponseModel(item, cartItem, Enumeration.FromDisplayName(locale ?? "en-US"))); } return items.Count > 0 ? IDomainResult.Success(items) : IDomainResult.NotFound?>(); } } }