Skip to content

Commit b2ca6ea

Browse files
committed
Use DateOnly instead of DateTime
1 parent bde0111 commit b2ca6ea

File tree

12 files changed

+37
-36
lines changed

12 files changed

+37
-36
lines changed

src/LinkDotNet.Blog.Domain/UserRecord.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class UserRecord : Entity
66
{
77
public int UserIdentifierHash { get; set; }
88

9-
public DateTime DateTimeUtcClicked { get; set; }
9+
public DateOnly DateClicked { get; set; }
1010

1111
public string UrlClicked { get; set; }
1212
}

src/LinkDotNet.Blog.Web/Features/Admin/Dashboard/Components/DateRangeSelector.razor

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919

2020
private async Task StartDateChanged(ChangeEventArgs args)
2121
{
22-
filter.StartDate = args.Value is string { Length: >0 } dateTime ? DateTime.Parse(dateTime) : null;
22+
filter.StartDate = args.Value is string { Length: >0 } dateTime ? DateOnly.Parse(dateTime) : null;
2323
await ApplyFilters();
2424
}
2525

2626
private async Task EndDateChanged(ChangeEventArgs args)
2727
{
28-
filter.EndDate = args.Value is string { Length: >0 } dateTime ? DateTime.Parse(dateTime) : null;
28+
filter.EndDate = args.Value is string { Length: >0 } dateTime ? DateOnly.Parse(dateTime) : null;
2929
await ApplyFilters();
3030
}
31-
}
31+
}

src/LinkDotNet.Blog.Web/Features/Admin/Dashboard/Components/VisitCountPerPage.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@
6565

6666
var userRecordsTask = UserRecordRepository.GetAllByProjectionAsync(
6767
s => s.UrlClicked,
68-
ur => (!filter.StartDate.HasValue || ur.DateTimeUtcClicked >= filter.StartDate)
69-
&& (!filter.EndDate.HasValue || ur.DateTimeUtcClicked <= filter.EndDate));
68+
ur => (!filter.StartDate.HasValue || ur.DateClicked >= filter.StartDate)
69+
&& (!filter.EndDate.HasValue || ur.DateClicked <= filter.EndDate));
7070

7171
var blogPosts = await blogPostsTask;
7272
var userRecords = await userRecordsTask;

src/LinkDotNet.Blog.Web/Features/Admin/Dashboard/Services/DashboardService.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ public async Task<DashboardData> GetDashboardDataAsync()
2020
{
2121
var records = await userRecordRepository.GetAllAsync();
2222
var users = records.GroupBy(r => r.UserIdentifierHash).Count();
23-
var thirtyDaysAgo = DateTime.UtcNow.AddDays(-30).Date;
23+
var thirtyDaysAgo = DateOnly.FromDateTime(DateTime.UtcNow.AddDays(-30));
2424
var users30Days = records
25-
.Where(r => r.DateTimeUtcClicked >= thirtyDaysAgo)
25+
.Where(r => r.DateClicked >= thirtyDaysAgo)
2626
.GroupBy(r => r.UserIdentifierHash).Count();
2727

2828
var clicks = records.Count;
29-
var clicks30Days = records.Count(r => r.DateTimeUtcClicked >= thirtyDaysAgo);
29+
var clicks30Days = records.Count(r => r.DateClicked >= thirtyDaysAgo);
3030

3131
var aboutMeClicks = records.Count(r => r.UrlClicked.Contains("AboutMe"));
32-
var aboutMeClicksLast30Days = records.Count(r => r.UrlClicked.Contains("AboutMe") && r.DateTimeUtcClicked >= thirtyDaysAgo);
32+
var aboutMeClicksLast30Days = records.Count(r => r.UrlClicked.Contains("AboutMe") && r.DateClicked >= thirtyDaysAgo);
3333

3434
return new DashboardData
3535
{
@@ -41,4 +41,4 @@ public async Task<DashboardData> GetDashboardDataAsync()
4141
AboutMeClicksLast30Days = aboutMeClicksLast30Days,
4242
};
4343
}
44-
}
44+
}

src/LinkDotNet.Blog.Web/Features/Admin/Dashboard/Services/Filter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace LinkDotNet.Blog.Web.Features.Admin.Dashboard.Services;
44

55
public sealed class Filter
66
{
7-
public DateTime? StartDate { get; set; }
7+
public DateOnly? StartDate { get; set; }
88

9-
public DateTime? EndDate { get; set; }
10-
}
9+
public DateOnly? EndDate { get; set; }
10+
}

src/LinkDotNet.Blog.Web/Features/Services/UserRecordService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ private async ValueTask GetAndStoreUserRecordAsync()
5353
var record = new UserRecord
5454
{
5555
UserIdentifierHash = identifierHash,
56-
DateTimeUtcClicked = DateTime.UtcNow,
56+
DateClicked = DateOnly.FromDateTime(DateTime.UtcNow),
5757
UrlClicked = url,
5858
};
5959

src/LinkDotNet.Blog.Web/LinkDotNet.Blog.Web.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
<ItemGroup>
88
<PackageReference Include="Blazored.Toast" Version="4.0.0" />
99
<PackageReference Include="BuildBundlerMinifier" Version="3.2.449" PrivateAssets="all" />
10+
<PackageReference Include="ErikEJ.EntityFrameworkCore.SqlServer.DateOnlyTimeOnly" Version="7.0.1" />
1011
<PackageReference Include="GitInfo" Version="2.3.0" PrivateAssets="all" />
1112
<PackageReference Include="Markdig" Version="0.30.4" />
1213
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="7.0.2" />
1314
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.2" />
1415
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.2" />
15-
<PackageReference Include="System.ServiceModel.Syndication" Version="7.0.0" />
16+
<PackageReference Include="System.ServiceModel.Syndication" Version="7.0.0" />
1617
</ItemGroup>
1718

1819
<ItemGroup>

src/LinkDotNet.Blog.Web/RegistrationExtensions/SqlRegistrationExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public static void UseSqlAsStorageProvider(this IServiceCollection services)
1616
{
1717
var configuration = s.GetRequiredService<AppConfiguration>();
1818
var connectionString = configuration.ConnectionString;
19-
builder.UseSqlServer(connectionString)
19+
builder.UseSqlServer(connectionString, x => x.UseDateOnlyTimeOnly())
2020
#if DEBUG
2121
.EnableDetailedErrors()
2222
#endif

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Admin/Dashboard/Components/VisitCountPerPageTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,20 @@ public async Task ShouldFilterByDate()
4646
await Repository.StoreAsync(blogPost1);
4747
await Repository.StoreAsync(blogPost2);
4848
var clicked1 = new UserRecord
49-
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateTimeUtcClicked = new DateTime(2020, 1, 1) };
49+
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateClicked = new DateOnly(2020, 1, 1) };
5050
var clicked2 = new UserRecord
51-
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateTimeUtcClicked = DateTime.MinValue };
51+
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateClicked = DateOnly.MinValue };
5252
var clicked3 = new UserRecord
53-
{ UrlClicked = $"blogPost/{blogPost2.Id}", DateTimeUtcClicked = DateTime.MinValue };
53+
{ UrlClicked = $"blogPost/{blogPost2.Id}", DateClicked = DateOnly.MinValue };
5454
var clicked4 = new UserRecord
55-
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateTimeUtcClicked = new DateTime(2021, 1, 1) };
55+
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateClicked = new DateOnly(2021, 1, 1) };
5656
await DbContext.UserRecords.AddRangeAsync(new[] { clicked1, clicked2, clicked3, clicked4 });
5757
await DbContext.SaveChangesAsync();
5858
using var ctx = new TestContext();
5959
ctx.ComponentFactories.Add<DateRangeSelector, FilterStubComponent>();
6060
RegisterRepositories(ctx);
6161
var cut = ctx.RenderComponent<VisitCountPerPage>();
62-
var filter = new Filter { StartDate = new DateTime(2019, 1, 1), EndDate = new DateTime(2020, 12, 31) };
62+
var filter = new Filter { StartDate = new DateOnly(2019, 1, 1), EndDate = new DateOnly(2020, 12, 31) };
6363

6464
await cut.InvokeAsync(() => cut.FindComponent<FilterStubComponent>().Instance.FireFilterChanged(filter));
6565

@@ -81,13 +81,13 @@ public async Task ShouldShowTotalClickCount()
8181
await Repository.StoreAsync(blogPost1);
8282
await Repository.StoreAsync(blogPost2);
8383
var clicked1 = new UserRecord
84-
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateTimeUtcClicked = new DateTime(2020, 1, 1) };
84+
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateClicked = new DateOnly(2020, 1, 1) };
8585
var clicked2 = new UserRecord
86-
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateTimeUtcClicked = DateTime.MinValue };
86+
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateClicked = DateOnly.MinValue };
8787
var clicked3 = new UserRecord
88-
{ UrlClicked = $"blogPost/{blogPost2.Id}", DateTimeUtcClicked = DateTime.MinValue };
88+
{ UrlClicked = $"blogPost/{blogPost2.Id}", DateClicked = DateOnly.MinValue };
8989
var clicked4 = new UserRecord
90-
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateTimeUtcClicked = new DateTime(2021, 1, 1) };
90+
{ UrlClicked = $"blogPost/{blogPost1.Id}", DateClicked = new DateOnly(2021, 1, 1) };
9191
await DbContext.UserRecords.AddRangeAsync(new[] { clicked1, clicked2, clicked3, clicked4 });
9292
await DbContext.SaveChangesAsync();
9393
using var ctx = new TestContext();
@@ -127,4 +127,4 @@ private class FilterStubComponent : ComponentBase
127127

128128
public void FireFilterChanged(Filter filter) => FilterChanged.InvokeAsync(filter);
129129
}
130-
}
130+
}

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Admin/Dashboard/Service/DashboardServiceTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public async Task ShouldGetTotalUsers()
2020
var record1 = new UserRecord
2121
{
2222
UserIdentifierHash = 2,
23-
DateTimeUtcClicked = DateTime.UtcNow,
23+
DateClicked = DateOnly.FromDateTime(DateTime.UtcNow),
2424
UrlClicked = string.Empty,
2525
};
2626
var record2 = new UserRecord
@@ -48,7 +48,7 @@ public async Task ShouldGetTotalClicks()
4848
{
4949
var record1 = new UserRecord
5050
{
51-
DateTimeUtcClicked = DateTime.UtcNow,
51+
DateClicked = DateOnly.FromDateTime(DateTime.UtcNow),
5252
UrlClicked = "index",
5353
};
5454
var record2 = new UserRecord
@@ -74,7 +74,7 @@ public async Task ShouldGetAboutMeClicks()
7474
{
7575
var record1 = new UserRecord
7676
{
77-
DateTimeUtcClicked = DateTime.UtcNow,
77+
DateClicked = DateOnly.FromDateTime(DateTime.UtcNow),
7878
UrlClicked = "AboutMe",
7979
};
8080
var record2 = new UserRecord
@@ -94,4 +94,4 @@ public async Task ShouldGetAboutMeClicks()
9494
data.TotalAboutMeClicks.Should().Be(2);
9595
data.AboutMeClicksLast30Days.Should().Be(1);
9696
}
97-
}
97+
}

0 commit comments

Comments
 (0)