using DomainResults.Common; using DataProviders.Collections; using Core.Enumerations; using Core.Abstractions; using WeatherForecast.Models.Responses; namespace WeatherForecast.Services { /// /// /// public interface IShopCartItemsService { /// /// /// /// /// /// /// (List?, IDomainResult) Get(Guid siteId, Guid userId, string? locale); /// /// /// /// /// /// IDomainResult Delete(Guid siteId, Guid userId); } /// /// /// 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(Guid siteId, Guid userId, string? locale) { try { 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) { 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?>(); } catch (Exception ex) { _logger.LogError(ex, "Unhandled exception"); return IDomainResult.Failed?>(ex.Message); } } /// /// /// /// /// /// public IDomainResult Delete(Guid siteId, Guid userId) { try { return _shopCartDataProvider.DeleteAll(siteId, userId); } catch (Exception ex) { _logger.LogError(ex, "Unhandled exception"); return IDomainResult.Failed(ex.Message); } } } }