using Core.DomainObjects; using Core.Enumerations; using DataProviders; using DomainResults.Common; using WeatherForecast.Models; using WeatherForecast.Models.Responses; namespace WeatherForecast.Services { public interface IShopItemsService { (GetShopItemsResponseModel?, IDomainResult) Get(Guid siteId, Guid? category, int currentPage, int itemsPerPage, Locales locale, string? searchText); IDomainResult Delete(Guid siteId); } public class ShopItemsService : IShopItemsService { private readonly ILogger _logger; private readonly IShopCatalogDataProvider _shopCatalogDataProvider; private readonly ICategoryDataProvider _categoryDataProvider; public ShopItemsService( ILogger logger, IShopCatalogDataProvider shopCatalogDataprovider, ICategoryDataProvider categoryDataProvider ) { _logger = logger; _shopCatalogDataProvider = shopCatalogDataprovider; _categoryDataProvider = categoryDataProvider; } public (GetShopItemsResponseModel?, IDomainResult) Get(Guid siteId, Guid? category, int currentPage, int itemsPerPage, Locales locale, string? searchText) { var (items, result) = _shopCatalogDataProvider.GetAll(siteId, currentPage > 0 ? ((currentPage - 1) * itemsPerPage) : 0, itemsPerPage); if (!result.IsSuccess || items == null) return (null, result); var shopItems = new List(); foreach (var item in items) { var categories = new List(); foreach (var catId in item.Categories) { var (cat, getCategoryResult) = _categoryDataProvider.Get(siteId, catId); if (!getCategoryResult.IsSuccess || cat == null) return (null, getCategoryResult); categories.Add(cat); } shopItems.Add(new GetShopItemResponseModel(item, categories, locale)); } return shopItems.Count > 0 ? IDomainResult.Success(new GetShopItemsResponseModel(currentPage, 0, shopItems)) : IDomainResult.NotFound(); } public IDomainResult Delete(Guid siteId) => _shopCatalogDataProvider.DeleteAll(siteId); } }