Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace PdfSmith.BusinessLayer.Services;

public class TimeZoneTimeProvider(ITimeZoneService timeZoneService) : TimeProvider
public class RequestTimeProvider(ITimeZoneService timeZoneService) : TimeProvider
{
public override TimeZoneInfo LocalTimeZone => timeZoneService.GetTimeZone() ?? TimeZoneInfo.Utc;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

namespace PdfSmith.BusinessLayer.Templating;

public class HandlebarsTemplateEngine(TimeZoneTimeProvider timeZoneTimeProvider) : ITemplateEngine
public class HandlebarsTemplateEngine(RequestTimeProvider requestTimeProvider) : ITemplateEngine
{
private readonly Lazy<IHandlebars> handlebarsInstance = new(() => CreateHandlebarsInstance(timeZoneTimeProvider));
private readonly Lazy<IHandlebars> handlebarsInstance = new(() => CreateHandlebarsInstance(requestTimeProvider));

public Task<string> RenderAsync(string template, object? model, CultureInfo culture, CancellationToken cancellationToken = default)
{
Expand All @@ -32,7 +32,7 @@ public Task<string> RenderAsync(string template, object? model, CultureInfo cult
}
}

private static IHandlebars CreateHandlebarsInstance(TimeZoneTimeProvider timeZoneTimeProvider)
private static IHandlebars CreateHandlebarsInstance(RequestTimeProvider requestTimeProvider)
{
var handlebars = Handlebars.Create();

Expand Down Expand Up @@ -92,7 +92,7 @@ private static IHandlebars CreateHandlebarsInstance(TimeZoneTimeProvider timeZon
var format = arguments.ElementAtOrDefault(0)?.ToString() ??
$"{CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern} {CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern}";

var now = timeZoneTimeProvider.GetLocalNow().DateTime;
var now = requestTimeProvider.GetLocalNow().DateTime;
return now.ToString(format, CultureInfo.CurrentCulture);
});

Expand All @@ -101,7 +101,7 @@ private static IHandlebars CreateHandlebarsInstance(TimeZoneTimeProvider timeZon
var format = arguments.ElementAtOrDefault(0)?.ToString() ??
$"{CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern} {CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern}";

var now = timeZoneTimeProvider.GetUtcNow().DateTime;
var now = requestTimeProvider.GetUtcNow().DateTime;
return now.ToString(format, CultureInfo.CurrentCulture);
});

Expand Down
6 changes: 3 additions & 3 deletions src/PdfSmith.BusinessLayer/Templating/RazorTemplateEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ public async Task<string> RenderAsync(string template, object? model, CultureInf
{
try
{
var sanitizedTemplate = DateTimeNowRegex.Replace(template, "@timeZoneTimeProvider.GetLocalNow().DateTime");
sanitizedTemplate = DateTimeOffsetNowRegex.Replace(sanitizedTemplate, "@timeZoneTimeProvider.GetLocalNow()");
var sanitizedTemplate = DateTimeNowRegex.Replace(template, "@requestTimeProvider.GetLocalNow().DateTime");
sanitizedTemplate = DateTimeOffsetNowRegex.Replace(sanitizedTemplate, "@requestTimeProvider.GetLocalNow()");

var content = $"""
@using System
@using System.Collections.Generic
@using System.Linq
@inject PdfSmith.BusinessLayer.Services.TimeZoneTimeProvider timeZoneTimeProvider
@inject PdfSmith.BusinessLayer.Services.RequestTimeProvider requestTimeProvider
{sanitizedTemplate}
""";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace PdfSmith.BusinessLayer.Templating;

public partial class ScribanTemplateEngine(TimeZoneTimeProvider timeZoneTimeProvider) : ITemplateEngine
public partial class ScribanTemplateEngine(RequestTimeProvider requestTimeProvider) : ITemplateEngine
{
private const string DateTimeZonePlaceholder = "datetime_withzone";

Expand All @@ -27,7 +27,7 @@ public async Task<string> RenderAsync(string text, object? model, CultureInfo cu
context.PushCulture(culture);

var dateWithTimeZoneScript = new ScriptObject();
dateWithTimeZoneScript.Import(DateTimeZonePlaceholder, new Func<DateTime>(() => timeZoneTimeProvider.GetLocalNow().DateTime));
dateWithTimeZoneScript.Import(DateTimeZonePlaceholder, new Func<DateTime>(() => requestTimeProvider.GetLocalNow().DateTime));
context.PushGlobal(dateWithTimeZoneScript);

var result = await template.RenderAsync(context);
Expand Down
2 changes: 1 addition & 1 deletion src/PdfSmith/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
builder.Services.AddHttpContextAccessor();

builder.Services.AddSingleton(TimeProvider.System);
builder.Services.AddSingleton<TimeZoneTimeProvider>();
builder.Services.AddSingleton<RequestTimeProvider>();

builder.Services.AddSingleton<ITimeZoneService, TimeZoneService>();

Expand Down