using Infrastructure.Email; using Infrastructure.Email.Templates.Rendering; using Microsoft.Extensions.Configuration; namespace Features.Emails.Services; /// /// Default implementation of . /// public class EmailDispatcher( IEmailProvider emailProvider, IEmailTemplateProvider emailTemplateProvider, IConfiguration configuration ) : IEmailDispatcher { /// /// The base URL of the website, used to build confirmation links. Read from the /// WEBSITE_BASE_URL configuration value. /// /// /// Thrown when the WEBSITE_BASE_URL configuration value is not set. /// private string WebsiteBaseUrl => configuration["WEBSITE_BASE_URL"] ?? throw new InvalidOperationException("WEBSITE_BASE_URL environment variable is not set"); /// public async Task SendRegistrationEmailAsync( string firstName, string email, string confirmationToken ) { string confirmationLink = $"{WebsiteBaseUrl}/users/confirm?token={confirmationToken}"; string emailHtml = await emailTemplateProvider.RenderUserRegisteredEmailAsync( firstName, confirmationLink ); await emailProvider.SendAsync(email, "Welcome to The Biergarten App!", emailHtml); } /// public async Task SendResendConfirmationEmailAsync( string firstName, string email, string confirmationToken ) { string confirmationLink = $"{WebsiteBaseUrl}/users/confirm?token={confirmationToken}"; string emailHtml = await emailTemplateProvider.RenderResendConfirmationEmailAsync( firstName, confirmationLink ); await emailProvider.SendAsync( email, "Confirm Your Email - The Biergarten App", emailHtml, true ); } }