public async Task <List <Product> > Sort(SortOption sortOption) { var products = await _apiResourceProxy.GetProducts(); var productSorter = _productSorterFactory.GetProductSorter(sortOption); return(productSorter.Sort(products)); }
public async Task <IEnumerable <Product> > GetSortedProductsAsync(SortOption type) { var byPopularity = type == SortOption.Recommended; var products = await GetProductsAsync(); if (byPopularity) { var customerProducts = await GetCustomerProductsAsync(); products = products.Concat(customerProducts); } var sorter = _factory.GetProductSorter(type); return(sorter.Sort(products)); }
public async Task <List <Product> > GetProducts(SortOption sortOption) { try { _logger.LogInformation($"{nameof(ProductService)}.{nameof(GetProducts)} called."); // getting the products from WooliesX var productResponses = await _wooliesXClient.GetProducts(_wooliesXOptions.UserToken); // mapping to api domain model var products = _mapper.Map <List <ProductResponse>, List <Product> >(productResponses); // getting the sort strategy implementation by srt option var productSorter = _productSorterFactory.GetProductSorter(sortOption); // return the sorted products return(await productSorter.SortAsync(products)); } catch (Exception exp) { _logger.LogError(exp, "GetProducts failed to failed to return sorted products."); throw; } }