private static void UpdateUserImageCollection(Dictionary <FeedItemKey, UploadedImageFeedViewModel> userImagesViewModelConsolidated, UploadedImageFeedViewModel uploadedImageFeed) { // the key to identify if a transaction is unique or not depends on the user id and the time since the transaction occurred FeedItemKey feedKey = new FeedItemKey() { UserId = uploadedImageFeed.UploaderUserId, TimeAgo = uploadedImageFeed.TimeAgo }; UploadedImageFeedViewModel existingUploadedImageFeed = new UploadedImageFeedViewModel(); // check if the transaction for this user and time is already accounted for bool uploadedImageAlreadyInCollection = userImagesViewModelConsolidated.TryGetValue(feedKey, out existingUploadedImageFeed); // if it isn't, then add it to our consolidated collection to begin consolidating if (!uploadedImageAlreadyInCollection) { userImagesViewModelConsolidated.Add(feedKey, uploadedImageFeed); } // if it is, then add the image path to the consolidated collection else { if (uploadedImageFeed.UploadedImagesPaths.Count > 0) { existingUploadedImageFeed.UploadedImagesPaths.Add(uploadedImageFeed.UploadedImagesPaths[0]); } } }
/// <summary> /// On the user's feed, we want to consolidate multiple "Sent gift" notices into a single line item. For example, the following transactions should be consolidated: /// "jskiles sent a 'Red Rose' gift to justin on Aug 10" /// "jskiles sent a 'Red Rose' gift to justin on Aug 10" /// "jskiles sent a 'Red Rose' gift to justin on Aug 10" /// "jskiles sent a 'White Rose' gift to justin on Aug 10" /// /// Further, all gifts of the same ID should be summed into a single count. The above would condense to a single line of: /// "jskiles sent 3x 'Red Rose' gifts and 1x 'White Rose' gift to justin on Aug 10" /// </summary> /// <param name="giftTransactions"></param> /// <returns></returns> public static IReadOnlyCollection <GiftReceivedFeedViewModel> GetConsolidatedGiftTransactions(this IReadOnlyCollection <GiftReceivedFeedViewModel> giftTransactions) { Dictionary <FeedItemKey, GiftReceivedFeedViewModel> consolidatedGiftTransactionViewModels = new Dictionary <FeedItemKey, GiftReceivedFeedViewModel>(); foreach (var giftTransaction in giftTransactions) { // the key to identify if a transaction is unique or not depends on the user id and the time since the transaction occurred FeedItemKey key = GetFeedItemKey(giftTransaction); GiftReceivedFeedViewModel existingGiftReceivedFeedViewModel = new GiftReceivedFeedViewModel(); bool alreadyExists = consolidatedGiftTransactionViewModels.TryGetValue(key, out existingGiftReceivedFeedViewModel); if (!alreadyExists) { //var newGiftReceivedFeedViewModel = Mapper.Map<GiftTransactionLog, GiftReceivedFeedViewModel>(giftTransaction); AddGiftReceivedFeedItem(giftTransaction); consolidatedGiftTransactionViewModels.Add(key, giftTransaction); } else { GiftReceivedFeedItemViewModel existingGiftReceivedFeedItemViewModel = new GiftReceivedFeedItemViewModel(); alreadyExists = existingGiftReceivedFeedViewModel.Gifts.TryGetValue(giftTransaction.StoreItemId, out existingGiftReceivedFeedItemViewModel); if (!alreadyExists) { AddGiftReceivedFeedItem(giftTransaction); } else { existingGiftReceivedFeedItemViewModel.GiftSentCount++; } } } return(consolidatedGiftTransactionViewModels.Values.ToList().AsReadOnly()); }
private static FeedItemKey GetFeedItemKey(GiftReceivedFeedViewModel giftTransaction) { FeedItemKey key = new FeedItemKey() { UserId = giftTransaction.SenderUserId, TimeAgo = giftTransaction.TimeAgo }; return(key); }