Skip to content

Commit

Permalink
refactor: Simplified Service
Browse files Browse the repository at this point in the history
  • Loading branch information
linkdotnet committed Mar 28, 2024
1 parent 150dc0b commit 4823a14
Showing 1 changed file with 20 additions and 29 deletions.
49 changes: 20 additions & 29 deletions src/LinkDotNet.Blog.Web/Features/TransformBlogPostRecordsJob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,39 +57,23 @@ public async Task RunAsync(JobExecutionContext context, CancellationToken token)
IEnumerable<BlogPost> blogPosts,
IEnumerable<UserRecord> 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<UserRecord> 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<BlogPostRecord> MergeRecords(
IEnumerable<BlogPostRecord> newBlogPostRecords,
IEnumerable<BlogPostRecord> oldBlogPostRecords)
IEnumerable<BlogPostRecord> oldBlogPostRecords,
IEnumerable<BlogPostRecord> newBlogPostRecords)
{
return oldBlogPostRecords.Concat(newBlogPostRecords)
.GroupBy(x => new { x.BlogPostId, x.DateClicked })
Expand All @@ -101,6 +85,13 @@ private static Dictionary<(string blogPostId, DateOnly date), int> GetClicksPerD
});
}

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();
Expand All @@ -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());
Expand Down

0 comments on commit 4823a14

Please sign in to comment.