Skip to content

Commit 20e583a

Browse files
committed
feat: Versioning of blog posts
1 parent b4bae44 commit 20e583a

19 files changed

Lines changed: 1569 additions & 21 deletions

File tree

Directory.Packages.props

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
44
</PropertyGroup>
55
<ItemGroup Label="Code Analyzers">
6+
<PackageVersion Include="DiffPlex" Version="1.9.0" />
67
<PackageVersion Include="IDisposableAnalyzers" Version="4.0.8" />
78
<GlobalPackageReference Include="SonarAnalyzer.CSharp" Version="10.23.0.137933" PrivateAssets="All" IncludeAssets="Runtime;Build;Native;contentFiles;Analyzers" />
89
</ItemGroup>
@@ -60,4 +61,4 @@
6061
<ItemGroup Label="Source Code Generators">
6162
<PackageVersion Include="LinkDotNet.Enumeration" Version="1.4.0" />
6263
</ItemGroup>
63-
</Project>
64+
</Project>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Collections.Immutable;
4+
using System.Linq;
5+
6+
namespace LinkDotNet.Blog.Domain;
7+
8+
public sealed class BlogPostVersion : Entity
9+
{
10+
public string BlogPostId { get; private set; } = default!;
11+
12+
public int VersionNumber { get; private set; }
13+
14+
public DateTime CreatedAt { get; private set; }
15+
16+
public string Title { get; private set; } = default!;
17+
18+
public string ShortDescription { get; private set; } = default!;
19+
20+
public string Content { get; private set; } = default!;
21+
22+
public string PreviewImageUrl { get; private set; } = default!;
23+
24+
public string? PreviewImageUrlFallback { get; private set; }
25+
26+
public DateTime UpdatedDate { get; private set; }
27+
28+
public IList<string> Tags { get; private set; } = [];
29+
30+
public bool IsPublished { get; private set; }
31+
32+
public int ReadingTimeInMinutes { get; private set; }
33+
34+
public string? AuthorName { get; private set; }
35+
36+
public string TagsAsString => string.Join(",", Tags);
37+
38+
public static BlogPostVersion CreateSnapshot(BlogPost post, int versionNumber)
39+
{
40+
ArgumentNullException.ThrowIfNull(post);
41+
42+
return new BlogPostVersion
43+
{
44+
BlogPostId = post.Id,
45+
VersionNumber = versionNumber,
46+
CreatedAt = DateTime.UtcNow,
47+
Title = post.Title,
48+
ShortDescription = post.ShortDescription,
49+
Content = post.Content,
50+
PreviewImageUrl = post.PreviewImageUrl,
51+
PreviewImageUrlFallback = post.PreviewImageUrlFallback,
52+
UpdatedDate = post.UpdatedDate,
53+
Tags = post.Tags.ToImmutableArray(),
54+
IsPublished = post.IsPublished,
55+
ReadingTimeInMinutes = post.ReadingTimeInMinutes,
56+
AuthorName = post.AuthorName,
57+
};
58+
}
59+
}

0 commit comments

Comments
 (0)