using DomainResults.Common; using WeatherForecast.Models.Responses; using DataProviders; using Core.Enumerations; namespace WeatherForecast.Services { public interface IShopCartItemsService { (List?, IDomainResult) Get(Guid siteId, Guid userId, Locales locale); IDomainResult Delete(Guid siteId, Guid userId); } public class ShopCartItemsService : IShopCartItemsService { ILogger _logger; IShopCatalogDataProvider _shopCatalogDataProvider; IShopCartDataProvider _shopCartDataProvider; public ShopCartItemsService( ILogger logger, IShopCatalogDataProvider shopCatalogDataProvider, IShopCartDataProvider shopCartDataprovider ) { _logger = logger; _shopCatalogDataProvider = shopCatalogDataProvider; _shopCartDataProvider = shopCartDataprovider; } public (List?, IDomainResult) Get(Guid siteId, Guid userId, Locales locale) { var (cartItems, getCartItemsResult) = _shopCartDataProvider.GetAll(siteId, userId); if (!getCartItemsResult.IsSuccess || cartItems == null) return (null, getCartItemsResult); var items = new List(); foreach (var cartItem in cartItems) { var (item, result) = _shopCatalogDataProvider.Get(siteId, cartItem.Sku); if (!result.IsSuccess || item == null) return (null, result); items.Add(new GetShopCartItemResponseModel(item, cartItem, locale)); } return items.Count > 0 ? IDomainResult.Success(items) : IDomainResult.NotFound?>(); } public IDomainResult Delete(Guid siteId, Guid userId) => _shopCartDataProvider.DeleteAll(siteId, userId); } }