Example #1
0
        public async Task <IEnumerable <ProductDto> > GetSortedProductsAsync(ProductSortOptions sortOption)
        {
            var products = await client.GetProductsAsync();

            if (sortOption != ProductSortOptions.Recommended)
            {
                var orderBy = SortOptionsToOrderBy(sortOption);

                return(products.AsQueryable().OrderBy(orderBy));
            }

            var popularProducts = await GetShoppingHistories();

            var productsList = products.ToList();

            productsList.Sort((x, y) =>
            {
                double?xValue = null;
                double?yValue = null;

                if (popularProducts.ContainsKey(x.Name))
                {
                    xValue = popularProducts[x.Name];
                }
                if (popularProducts.ContainsKey(y.Name))
                {
                    yValue = popularProducts[y.Name];
                }

                if (xValue.HasValue && yValue.HasValue)
                {
                    return(yValue.Value.CompareTo(xValue.Value));
                }

                if (xValue.HasValue)
                {
                    return(-1);
                }

                if (yValue.HasValue)
                {
                    return(1);
                }

                return(string.Compare(x.Name, y.Name, StringComparison.OrdinalIgnoreCase));
            });

            return(productsList);
        }
Example #2
0
        private string SortOptionsToOrderBy(ProductSortOptions sortOptions)
        {
            switch (sortOptions)
            {
            case ProductSortOptions.Ascending:
                return($"{nameof(ProductDto.Name)} ascending");

            case ProductSortOptions.Descending:
                return($"{nameof(ProductDto.Name)} descending");

            case ProductSortOptions.High:
                return($"{nameof(ProductDto.Price)} descending");

            case ProductSortOptions.Low:
                return($"{nameof(ProductDto.Price)} ascending");

            case ProductSortOptions.Recommended:
                throw new ArgumentException();
            }

            return(null);
        }