/// <summary>
        /// Searchs products.
        /// </summary>
        /// <param name="productsByProgramRuns">The productsByProgramRuns.</param>
        /// <returns>Task{List{ProductResponseModel}}.</returns>
        public async Task <List <ProductResponseModel> > SearchProducts(List <ProductsByProgramRun> productsByProgramRuns)
        {
            try
            {
                string           providerName = _appSettings.ProductProvider2Api.ProviderName;
                string           requestUri   = _appSettings.ProductProvider2Api.RequestUri;
                FluentUriBuilder request      = CreateRequest(requestUri);

                var provider2Request = new Provider2Request
                {
                    CustomerId = 832,
                    PageNum    = 0,
                    PageSize   = productsByProgramRuns.Count,
                    SortOrder  = new List <ProductSortOrderRequestDto>()
                    {
                        new ProductSortOrderRequestDto()
                        {
                            Position      = 1,
                            SortColumn    = "department",
                            SortDirection = "ASC"
                        }
                    },
                    ItemId                  = new List <int>(),
                    ItemNum                 = new List <int>(),
                    UpcList                 = productsByProgramRuns.Select(p => p.ProductCode).ToList(),
                    BrandName               = new List <string>(),
                    DepartmentId            = new List <int>(),
                    SubDept1Id              = new List <int>(),
                    SubDept2Id              = new List <int>(),
                    TprType                 = "",
                    PromoInd                = "",
                    Status                  = "A",
                    CustomFields            = new List <CustomFieldsDto>(),
                    PrimaryBarcode          = "Y",
                    DisplayMhSummary        = true,
                    DisplayAttributeSummary = true,
                    DisplayBrandSummary     = true
                };

                Provider2Response response = await PostAsync <Provider2Request, Provider2Response>(
                    $"Search Products {requestUri}",
                    request.Uri,
                    provider2Request,
                    CancellationToken.None,
                    DataInterchangeFormat.Json,
                    providerName,
                    new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() });

                List <ProductResponseModel> productResponses = ConvertToProductResponses(productsByProgramRuns, response);

                return(productResponses);
            }
            catch (Exception e)
            {
                _logger.LogError($"{nameof(SearchProducts)} Unknown error encountered when reading an object ex {e}");
            }

            return(ConvertToProductResponses(productsByProgramRuns, null));
        }
        private Provider2Content GetProvider2Content(Provider2Response response, string productCode)
        {
            if (response?.Page?.Content?.Any() == true)
            {
                return(response.Page.Content.FirstOrDefault(c => c.Upc == productCode));
            }

            return(null);
        }
        private List <ProductResponseModel> ConvertToProductResponses(List <ProductsByProgramRun> productsByProgramRuns, Provider2Response response)
        {
            var productResponseDTOs = new List <ProductResponseModel>();

            foreach (ProductsByProgramRun productsByProgramRun in productsByProgramRuns)
            {
                Provider2Content provider2Content = GetProvider2Content(response, productsByProgramRun.ProductCode);

                productResponseDTOs.Add(new ProductResponseModel()
                {
                    PromotionId          = productsByProgramRun.PromotionId.ToString(),
                    OfferId              = productsByProgramRun.OfferId.ToString(),
                    ProductCode          = productsByProgramRun.ProductCode,
                    Name                 = productsByProgramRun.Name,
                    Provider2ImageUrl    = provider2Content?.ImageUrl,
                    Provider1ImageUrl    = string.Empty,
                    ProductsByProgramRun = productsByProgramRun,
                    ProductType          = ProductType.Provider2
                });
            }

            return(productResponseDTOs);
        }