namespace HrynCo.NotificationService.Worker.Services.EmailProcessing; using System.Text; using HrynCo.NotificationService.Contracts.Messages; using HrynCo.NotificationService.DAL.Abstract.Templates; internal sealed class EmailTemplateRenderingService : IEmailTemplateRenderingService { public RenderedEmail Render(EmailTemplate template, SendEmailMessageData data) { return new RenderedEmail( Interpolate(template.Subject, data.Variables), Interpolate(template.HtmlBody, data.Variables), Interpolate(template.TextBody, data.Variables)); } private static string Interpolate(string text, IReadOnlyDictionary variables) { var sb = new StringBuilder(text); foreach (var (key, value) in variables) sb.Replace($"{{{{{key}}}}}", value); return sb.ToString(); } }