mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-10-15 01:54:43 +00:00
Move email templates into Features.Emails (#283)
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
using Features.Emails.Templates.Mail;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.Components.Web.HtmlRendering;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Features.Emails.Templates.Rendering;
|
||||
|
||||
/// <summary>
|
||||
/// Service for rendering Razor email templates to HTML using HtmlRenderer.
|
||||
/// </summary>
|
||||
public class EmailTemplateProvider(IServiceProvider serviceProvider, ILoggerFactory loggerFactory)
|
||||
: IEmailTemplateProvider
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public async Task<string> RenderUserRegisteredEmailAsync(
|
||||
string username,
|
||||
string confirmationLink
|
||||
)
|
||||
{
|
||||
Dictionary<string, object?> parameters = new()
|
||||
{
|
||||
{ nameof(UserRegistration.Username), username },
|
||||
{ nameof(UserRegistration.ConfirmationLink), confirmationLink },
|
||||
};
|
||||
|
||||
return await RenderComponentAsync<UserRegistration>(parameters);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async Task<string> RenderResendConfirmationEmailAsync(
|
||||
string username,
|
||||
string confirmationLink
|
||||
)
|
||||
{
|
||||
Dictionary<string, object?> parameters = new()
|
||||
{
|
||||
{ nameof(ResendConfirmation.Username), username },
|
||||
{ nameof(ResendConfirmation.ConfirmationLink), confirmationLink },
|
||||
};
|
||||
|
||||
return await RenderComponentAsync<ResendConfirmation>(parameters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a scoped <see cref="HtmlRenderer" />, dispatches the render onto its renderer thread,
|
||||
/// and returns the resulting HTML string.
|
||||
/// </summary>
|
||||
private async Task<string> RenderComponentAsync<TComponent>(
|
||||
Dictionary<string, object?> parameters
|
||||
)
|
||||
where TComponent : IComponent
|
||||
{
|
||||
await using HtmlRenderer htmlRenderer = new(serviceProvider, loggerFactory);
|
||||
|
||||
string html = await htmlRenderer.Dispatcher.InvokeAsync(async () =>
|
||||
{
|
||||
ParameterView parameterView = ParameterView.FromDictionary(parameters);
|
||||
HtmlRootComponent output = await htmlRenderer.RenderComponentAsync<TComponent>(
|
||||
parameterView
|
||||
);
|
||||
|
||||
return output.ToHtmlString();
|
||||
});
|
||||
|
||||
return html;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
namespace Features.Emails.Templates.Rendering;
|
||||
|
||||
/// <summary>
|
||||
/// Service for rendering Razor email templates to HTML.
|
||||
/// </summary>
|
||||
public interface IEmailTemplateProvider
|
||||
{
|
||||
/// <summary>Renders the registration confirmation email template.</summary>
|
||||
/// <param name="username">The recipient's username, shown in the greeting.</param>
|
||||
/// <param name="confirmationLink">The URL the recipient follows to confirm their account.</param>
|
||||
/// <returns>A task whose result is the rendered HTML for the email body.</returns>
|
||||
Task<string> RenderUserRegisteredEmailAsync(string username, string confirmationLink);
|
||||
|
||||
/// <summary>Renders the resend-confirmation email template.</summary>
|
||||
/// <param name="username">The recipient's username, shown in the greeting.</param>
|
||||
/// <param name="confirmationLink">The URL the recipient follows to confirm their account.</param>
|
||||
/// <returns>A task whose result is the rendered HTML for the email body.</returns>
|
||||
Task<string> RenderResendConfirmationEmailAsync(string username, string confirmationLink);
|
||||
}
|
||||
Reference in New Issue
Block a user