private static void SyncInsertedPosts( IEnumerable<BlogPost> sourcePosts, IEnumerable<BlogPostBase> dataStoragePosts, BlogSyncPostsChangeSet changeSet) { var dbIds = dataStoragePosts.Select(x => x.SourceId).ToList(); var insertedPosts = sourcePosts.Where(post => !dbIds.Contains(post.SourceId)).Distinct().ToList(); changeSet.InsertedBlogPosts.AddRange(insertedPosts); }
public static BlogSyncPostsChangeSet GetChangeSet( string blogKey, IReadOnlyList<BlogPost> sourcePosts, IReadOnlyList<BlogPostBase> dataStoragePosts) { if (blogKey == null) { throw new ArgumentNullException(nameof(blogKey)); } if (sourcePosts == null) { throw new ArgumentNullException(nameof(sourcePosts)); } if (dataStoragePosts == null) { throw new ArgumentNullException(nameof(dataStoragePosts)); } var cleanSourcePosts = sourcePosts.Where(x => x != null) .OrderByDescending(x => x.UpdatedAt) .Distinct(x => x.SourceId) .ToReadOnlyList(); var cleanDataStoragePosts = dataStoragePosts.Where(x => x != null).Distinct(x => x.SourceId).ToReadOnlyList(); var changeSet = new BlogSyncPostsChangeSet(blogKey); SyncDeletedPosts(cleanSourcePosts, cleanDataStoragePosts, changeSet); SyncInsertedPosts(cleanSourcePosts, cleanDataStoragePosts, changeSet); SyncModifiedPosts(cleanSourcePosts, cleanDataStoragePosts, changeSet); return changeSet; }
private static void SyncModifiedPosts( IEnumerable<BlogPost> sourcePosts, IEnumerable<BlogPostBase> dataStoragePosts, BlogSyncPostsChangeSet changeSet) { var modifiedPosts = dataStoragePosts.Join( sourcePosts, dbPost => dbPost.SourceId, sourcePost => sourcePost.SourceId, (dbPost, sourcePost) => new { DbPost = dbPost, SourcePost = sourcePost }).ToList(); foreach (var modifiedPost in modifiedPosts) { var dbPost = modifiedPost.DbPost; var sourcePost = modifiedPost.SourcePost; bool isModified = (dbPost.Hash != sourcePost.Hash || sourcePost.UpdatedAt > dbPost.UpdatedAt); if (isModified) { changeSet.UpdatedBlogPosts.Add(sourcePost); } } }
public Task SaveChanges(BlogSetting blogSetting, BlogSyncPostsChangeSet changeSet) { this.OnSaveChangesRun?.Invoke(this, blogSetting.BlogKey); return Task.CompletedTask; }
public async Task SaveChanges(BlogSetting blogSetting, BlogSyncPostsChangeSet changeSet) { if (blogSetting == null) { throw new ArgumentNullException(nameof(blogSetting)); } if (changeSet == null) { throw new ArgumentNullException(nameof(changeSet)); } using (var session = this.DocumentStore.OpenAsyncSession()) { session.Advanced.MaxNumberOfRequestsPerSession = int.MaxValue; await DeletedPosts(session, changeSet.DeletedBlogPosts); await InsertOrUpdatePosts(session, changeSet.InsertedBlogPosts); await InsertOrUpdatePosts(session, changeSet.UpdatedBlogPosts); await session.SaveChangesAsync(); } }
private void HandleChanges(string blogKey, BlogSyncPostsChangeSet changeSet) { var posts = changeSet.InsertedBlogPosts.Concat(changeSet.UpdatedBlogPosts).ToList(); foreach (var post in posts) { post.BlogKey = blogKey; post.UrlSlug = this.config.SlugProvider.GetUrlSlug(post); post.BlavenId = this.config.BlavenIdProvider.GetBlavenId(post); this.config.TransformersProvider.ApplyTransformers(post); } }
internal void OnDataUpdated(BlogMeta blogMeta, BlogSyncPostsChangeSet changeSet) { this.BlogMeta = blogMeta; this.BlogPostsChanges = changeSet; }
public async Task SaveChanges(BlogSetting blogSetting, BlogSyncPostsChangeSet changeSet) { if (blogSetting == null) { throw new ArgumentNullException(nameof(blogSetting)); } if (changeSet == null) { throw new ArgumentNullException(nameof(changeSet)); } await this.DeletedPosts(changeSet.DeletedBlogPosts); await this.InsertOrUpdatePosts(changeSet.InsertedBlogPosts); await this.InsertOrUpdatePosts(changeSet.UpdatedBlogPosts); await this.DbContext.SaveChangesAsync(); }