From 4823a146ec7384b467ff61ce3a925e1cde143345 Mon Sep 17 00:00:00 2001 From: Steven Giesel Date: Thu, 28 Mar 2024 20:29:11 +0100 Subject: [PATCH] refactor: Simplified Service --- .../Features/TransformBlogPostRecordsJob.cs | 49 ++++++++----------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/src/LinkDotNet.Blog.Web/Features/TransformBlogPostRecordsJob.cs b/src/LinkDotNet.Blog.Web/Features/TransformBlogPostRecordsJob.cs index 557c1317..0cea1636 100644 --- a/src/LinkDotNet.Blog.Web/Features/TransformBlogPostRecordsJob.cs +++ b/src/LinkDotNet.Blog.Web/Features/TransformBlogPostRecordsJob.cs @@ -57,39 +57,23 @@ private static BlogPostRecord[] GetBlogPostRecords( IEnumerable blogPosts, IEnumerable userRecords) { - var clicksPerDay = GetClicksPerDay(userRecords); - return blogPosts - .SelectMany(blogPost => clicksPerDay.Keys.Where(k => k.blogPostId == blogPost.Id), - (blogPost, date) => new BlogPostRecord + .SelectMany(blogPost => userRecords + .Where(userRecord => GetBlogPostId(userRecord) == blogPost.Id) + .GroupBy(userRecord => userRecord.DateClicked) + .Select(group => new BlogPostRecord { - Id = blogPost.Id, BlogPostId = blogPost.Id, DateClicked = date.date, Clicks = clicksPerDay[date], - }).ToArray(); - } - - private static Dictionary<(string blogPostId, DateOnly date), int> GetClicksPerDay(IEnumerable userRecords) - { - var clicksPerDay = new Dictionary<(string blogPostId, DateOnly date), int>(); - - foreach (var userRecord in userRecords) - { - var id = userRecord.UrlClicked.Replace("blogPost/", string.Empty, StringComparison.OrdinalIgnoreCase); - var suffix = id.IndexOf('/', StringComparison.InvariantCultureIgnoreCase); - if (suffix != -1) - { - id = id[..suffix]; - } - var key = (id, userRecord.DateClicked); - clicksPerDay.TryGetValue(key, out var count); - clicksPerDay[key] = count + 1; - } - - return clicksPerDay; + Id = blogPost.Id, + BlogPostId = blogPost.Id, + DateClicked = group.Key, + Clicks = group.Count() + })) + .ToArray(); } private static IEnumerable MergeRecords( - IEnumerable newBlogPostRecords, - IEnumerable oldBlogPostRecords) + IEnumerable oldBlogPostRecords, + IEnumerable newBlogPostRecords) { return oldBlogPostRecords.Concat(newBlogPostRecords) .GroupBy(x => new { x.BlogPostId, x.DateClicked }) @@ -101,6 +85,13 @@ private static IEnumerable MergeRecords( }); } + private static string GetBlogPostId(UserRecord userRecord) + { + var id = userRecord.UrlClicked.Replace("blogPost/", string.Empty, StringComparison.OrdinalIgnoreCase); + var suffix = id.IndexOf('/', StringComparison.InvariantCultureIgnoreCase); + return suffix != -1 ? id[..suffix] : id; + } + private async Task TransformRecordsAsync() { var blogPosts = await blogPostRepository.GetAllAsync(); @@ -116,7 +107,7 @@ private async Task TransformRecordsAsync() var earliestDate = newBlogPostRecords.MinBy(r => r.DateClicked).DateClicked; var oldBlogPostRecords = await blogPostRecordRepository.GetAllAsync(f => f.DateClicked >= earliestDate); - var mergedRecords = MergeRecords(newBlogPostRecords, oldBlogPostRecords); + var mergedRecords = MergeRecords(oldBlogPostRecords, newBlogPostRecords); await blogPostRecordRepository.DeleteBulkAsync(oldBlogPostRecords.Select(o => o.Id).ToArray()); await blogPostRecordRepository.StoreBulkAsync(mergedRecords.ToArray());