private BatchWriteItemRequest GetHashtagsWriteRequests( IEnumerable <HashtagModel> hashtags, PhotoModel existingItem, IEnumerable <HashtagModel> hashtagsBefore, HashtagUpdateMode updateMode) { var hashtagsToRemove = updateMode == HashtagUpdateMode.Update ? GetHashTagsToRemove(hashtagsBefore, hashtags) : emptyHashtagSequence; var hashtagsToAdd = GetHashTagsToAdd(hashtagsBefore, hashtags).Select(x => new HashtagPhoto { Hashtag = x, Photo = existingItem }); logWriter.LogInformation($"Existing hashtags:\n{JsonConvert.SerializeObject(existingItem?.Hashtags.ToArray() ?? emptyHashtagSequence)}\nIncoming hashtags:\n{JsonConvert.SerializeObject(hashtags.ToArray())}\nHashtags to add:\n{JsonConvert.SerializeObject(hashtagsToAdd.ToArray())}\nHashtags to delete:\n{JsonConvert.SerializeObject(hashtagsToRemove.ToArray())}"); var hashTagRemoveRequests = hashtagsToRemove.Select(x => new WriteRequest { DeleteRequest = new DeleteRequest { Key = Mappers.Hashtag.ToDbKey(x), } }); var hashTagAddRequests = hashtagsToAdd.Select(x => new WriteRequest { PutRequest = new PutRequest { Item = Mappers.HashtagPhoto.ToDbItem(x) } }); var writeRequests = hashTagRemoveRequests.Union(hashTagAddRequests); return(writeRequests.Any() ? new BatchWriteItemRequest { RequestItems = new Dictionary <string, List <WriteRequest> > { { tableName, writeRequests.ToList() } } } : null); }
private BatchWriteItemRequest GetHashtagsRequests(string text, IEnumerable <HashtagModel> hashtags, PhotoModel existingItem, HashtagUpdateMode updateMode) { IEnumerable <HashtagModel> hashtagsBefore = updateMode == HashtagUpdateMode.Update ? existingItem.Hashtags : emptyHashtagSequence; existingItem.RawText = text; existingItem.Hashtags = hashtags; BatchWriteItemRequest writeItemsRequest = GetHashtagsWriteRequests(hashtags, existingItem, hashtagsBefore, updateMode); return(writeItemsRequest); }