internal static int?GetRatingDistributionItemCount(int ratingValue, LocaleDistributionItem item) { var result = item.ReviewStatistics.RatingDistribution.FirstOrDefault( ratingDistributionItem => ratingDistributionItem.RatingValue == ratingValue); return(result != null ? (int?)result.Count : null); }
private IEnumerable <ProductRating> GetProductRatings(Product product) { Log.Debug("In GetProductRatings"); long productId; if (!long.TryParse(product.Id, out productId)) { var message = string.Format("Product ID is not in the correct format. Skipping. PID: {0}", product.Id); Log.Error(message); if (ExecutionLogLoggerMessageLimit == 0 || _executionLogLoggerMessageCount++ <= ExecutionLogLoggerMessageLimit) { _executionLogLogger.AddCustomMessage(message); } else if (ExecutionLogLoggerMessageLimit != 0) { Log.ErrorFormat("ExecutionLogLogger message limit of {0} has been exceeded.", ExecutionLogLoggerMessageLimit); } return(Enumerable.Empty <ProductRating>()); } var externalReviewStatistics = ComputeExternalReviewStatistics(product.Id, product.NativeReviewStatistics, product.ReviewStatistics); var nativeLocaleDistributionItems = GetAggregatedLocaleDistributionItems(product.NativeReviewStatistics); var externalLocaleDistributionItems = GetAggregatedLocaleDistributionItems(externalReviewStatistics); var generalLocaleList = GetCombinedLocaleList(GetDisplayLocaleList(nativeLocaleDistributionItems), GetDisplayLocaleList(externalLocaleDistributionItems)); var result = generalLocaleList.Select(generalLocaleString => { LocaleDistributionItem nativeDistributionItem = nativeLocaleDistributionItems.FirstOrDefault( item => item.DisplayLocale.Equals(generalLocaleString, StringComparison.OrdinalIgnoreCase)); LocaleDistributionItem externalDistributionItem = externalLocaleDistributionItems.FirstOrDefault( item => item.DisplayLocale.Equals(generalLocaleString, StringComparison.OrdinalIgnoreCase)); var localizedNativeReviewStatistics = GetReviewStatistics(nativeDistributionItem); var localizedExternalReviewStatistics = GetReviewStatistics(externalDistributionItem); var resultItem = new ProductRating(productId, generalLocaleString, localizedNativeReviewStatistics, localizedExternalReviewStatistics); return(resultItem); }); Log.Debug("Exiting GetProductRatings"); return(result); }
private static ReviewStatistics GetCopyOfReviewStatistics(LocaleDistributionItem localeDistributionItem) { var result = new ReviewStatistics(); result.RatingDistribution = localeDistributionItem.ReviewStatistics.RatingDistribution.Select( item => new RatingDistributionItem { RatingValue = item.RatingValue, Count = item.Count }) .ToList(); result.TotalReviewCount = localeDistributionItem.ReviewStatistics.TotalReviewCount; return(result); }
private static ReviewStatistics GetExternalReviewStatistics(string pid, LocaleDistributionItem nativeLocaleDistributionItem, LocaleDistributionItem combinedLocaleDistributionItem) { var result = new ReviewStatistics { RatingDistribution = new List <RatingDistributionItem>(5) }; for (int i = 1; i <= 5; i++) { var nativeItemCount = GetRatingDistributionItemCount(i, nativeLocaleDistributionItem); var combinedItemCount = GetRatingDistributionItemCount(i, combinedLocaleDistributionItem); if (combinedItemCount == null && nativeItemCount == null) { continue; } if (nativeItemCount == null) { nativeItemCount = 0; } if (combinedItemCount == null) { combinedItemCount = 0; } if (combinedItemCount >= nativeItemCount) { combinedItemCount = combinedItemCount - nativeItemCount; } else if (nativeItemCount > 0) { combinedItemCount = 0; } var externalItemCount = combinedItemCount; result.RatingDistribution.Add(new RatingDistributionItem { RatingValue = i, Count = externalItemCount.Value }); } result.TotalReviewCount = result.RatingDistribution.Sum(rd => rd.Count); return(result); }
private ReviewStatistics ComputeExternalReviewStatistics(string pid, ReviewStatistics nativeReviewStatistics, ReviewStatistics reviewStatisticsNodeFromBazaarVoiceData) { var result = new ReviewStatistics(); var resultLocaleDistributionList = new List <LocaleDistributionItem>(); result.LocaleDistribution = resultLocaleDistributionList; foreach (var nativeLocaleDistributionItem in nativeReviewStatistics.LocaleDistribution ?? Enumerable.Empty <LocaleDistributionItem>()) { var matchFound = false; foreach (var combinedLocaleDistributionItem in reviewStatisticsNodeFromBazaarVoiceData.LocaleDistribution ?? Enumerable.Empty <LocaleDistributionItem>()) { if (nativeLocaleDistributionItem.DisplayLocale.Equals(combinedLocaleDistributionItem.DisplayLocale, StringComparison.Ordinal)) { matchFound = true; break; } } if (matchFound) { continue; } throw new ApplicationException( string.Format( "There is a locale {0} in the native LocaleDistributionItem which doesn't exist in the combined LocaleDistributionItem. PID: {1}", nativeLocaleDistributionItem.DisplayLocale, pid)); } foreach (var combinedLocaleDistributionItem in reviewStatisticsNodeFromBazaarVoiceData.LocaleDistribution ?? Enumerable.Empty <LocaleDistributionItem>()) { ReviewStatistics resultReviewStatistics; LocaleDistributionItem foundNativeLocaleDistributionItem = null; foreach (var nativeLocaleDistributionItem in nativeReviewStatistics.LocaleDistribution ?? Enumerable.Empty <LocaleDistributionItem>()) { if (combinedLocaleDistributionItem.DisplayLocale.Equals(nativeLocaleDistributionItem.DisplayLocale, StringComparison.Ordinal)) { foundNativeLocaleDistributionItem = nativeLocaleDistributionItem; break; } } if (foundNativeLocaleDistributionItem != null) { Log.DebugFormat("GetExternalReviewStatistics. PID: {0}", pid); resultReviewStatistics = GetExternalReviewStatistics(pid, foundNativeLocaleDistributionItem, combinedLocaleDistributionItem); } else { resultReviewStatistics = GetCopyOfReviewStatistics(combinedLocaleDistributionItem); } var resultLocaleDistributionItem = new LocaleDistributionItem { DisplayLocale = combinedLocaleDistributionItem.DisplayLocale, ReviewStatistics = resultReviewStatistics }; resultLocaleDistributionList.Add(resultLocaleDistributionItem); } return(result); }
private static ReviewStatistics GetReviewStatistics(LocaleDistributionItem localeDistributionItem) { var result = (localeDistributionItem ?? LocaleDistributionItem.Empty).ReviewStatistics; return(result); }