From e22d030fa2983d7d63a6913f17d261995298489d Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Mon, 10 Jun 2024 16:19:48 +0200 Subject: [PATCH] =?UTF-8?q?FillTemplate-Methode=20als=20Erweiterung=20hinz?= =?UTF-8?q?ugef=C3=BCgt.=20Option=20zum=20Schreiben=20von=20Platzhaltern?= =?UTF-8?q?=20als=20W=C3=B6rterbuch=20hinzugef=C3=BCgt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/MailController.cs | 3 +- .../Services/EmailOutService.cs | 27 +++--------- .../TemplateExtensions.cs | 42 +++++++++++++++++++ .../FillTemplateTests.cs | 15 ++++--- 4 files changed, 57 insertions(+), 30 deletions(-) create mode 100644 DigitalData.EmailProfilerDispatcher.Application/TemplateExtensions.cs diff --git a/DigitalData.EmailProfilerDispatcher.API/Controllers/MailController.cs b/DigitalData.EmailProfilerDispatcher.API/Controllers/MailController.cs index 41f895f..996dbb3 100644 --- a/DigitalData.EmailProfilerDispatcher.API/Controllers/MailController.cs +++ b/DigitalData.EmailProfilerDispatcher.API/Controllers/MailController.cs @@ -1,5 +1,6 @@ using DigitalData.Core.API; using DigitalData.EmailProfilerDispatcher.API.Resources; +using DigitalData.EmailProfilerDispatcher.Application; using DigitalData.EmailProfilerDispatcher.Application.Contracts; using DigitalData.EmailProfilerDispatcher.Application.DTOs.EmailOut; using DigitalData.EmailProfilerDispatcher.Application.Services; @@ -39,7 +40,7 @@ namespace DigitalData.EmailProfilerGateway.API.Controllers
DokumentenPortal"; - var result = EmailOutService.FillTemplate(template, mailData); + var result = template.FillTemplate(mailData); return Ok(result); } diff --git a/DigitalData.EmailProfilerDispatcher.Application/Services/EmailOutService.cs b/DigitalData.EmailProfilerDispatcher.Application/Services/EmailOutService.cs index ff7ee9d..b733eb7 100644 --- a/DigitalData.EmailProfilerDispatcher.Application/Services/EmailOutService.cs +++ b/DigitalData.EmailProfilerDispatcher.Application/Services/EmailOutService.cs @@ -17,35 +17,20 @@ namespace DigitalData.EmailProfilerDispatcher.Application.Services { } - public string ApplyTemplate(string template, params object[] models) => FillTemplate(template: template, models: models); - public async Task> CreateWithTemplateAsync(EmailOutCreateDto createDto, params object[] models) { - createDto.EmailSubj = FillTemplate(createDto.EmailSubj, models); - createDto.EmailBody = FillTemplate(createDto.EmailBody, models); + createDto.EmailSubj = createDto.EmailSubj.FillTemplate(models); + createDto.EmailBody = createDto.EmailBody.FillTemplate(models); return await base.CreateAsync(createDto); } - public static string FillTemplate(string template, params object[] models) + public async Task> CreateWithTemplateAsync(EmailOutCreateDto createDto, Dictionary placeholders, params object[] models) { - foreach(var model in models) - { - var properties = model.GetType().GetProperties(); - - foreach (var property in properties) - { - var attribute = property.GetCustomAttribute(); - - if (attribute != null) - { - var value = property.GetValue(model)?.ToString(); - template = template.Replace(attribute.Placeholder, value); - } - } - } + createDto.EmailSubj = createDto.EmailSubj.FillTemplate(placeholders); + createDto.EmailBody = createDto.EmailBody.FillTemplate(placeholders); - return template; + return await CreateWithTemplateAsync(createDto, models: models); } } } \ No newline at end of file diff --git a/DigitalData.EmailProfilerDispatcher.Application/TemplateExtensions.cs b/DigitalData.EmailProfilerDispatcher.Application/TemplateExtensions.cs new file mode 100644 index 0000000..92f54a8 --- /dev/null +++ b/DigitalData.EmailProfilerDispatcher.Application/TemplateExtensions.cs @@ -0,0 +1,42 @@ +using DigitalData.EmailProfilerDispatcher.Domain.Attributes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace DigitalData.EmailProfilerDispatcher.Application +{ + public static class TemplateExtensions + { + public static string FillTemplate(this string template, params object[] models) + { + foreach (var model in models) + { + var properties = model.GetType().GetProperties(); + + foreach (var property in properties) + { + var attribute = property.GetCustomAttribute(); + + if (attribute != null) + { + var value = property.GetValue(model)?.ToString(); + template = template.Replace(attribute.Placeholder, value); + } + } + } + + return template; + } + + public static string FillTemplate(this string template, Dictionary placeholders) + { + foreach (var ph in placeholders) + template = template.Replace(ph.Key, ph.Value); + + return template; + } + } +} diff --git a/EmailProfilerDispatcher.Tests/FillTemplateTests.cs b/EmailProfilerDispatcher.Tests/FillTemplateTests.cs index f6d9460..257106a 100644 --- a/EmailProfilerDispatcher.Tests/FillTemplateTests.cs +++ b/EmailProfilerDispatcher.Tests/FillTemplateTests.cs @@ -1,6 +1,8 @@ +using DigitalData.EmailProfilerDispatcher.Application; using DigitalData.EmailProfilerDispatcher.Application.Services; using DigitalData.EmailProfilerDispatcher.Domain.Attributes; using DigitalData.EmailProfilerDispatcher.Domain.Entities; +using System.Diagnostics.Tracing; namespace EmailProfilerDispatcher.Tests { @@ -27,7 +29,8 @@ namespace EmailProfilerDispatcher.Tests var mailData1 = new MailData1(); var mailData2 = new MailData2(); - var mailData3 = new MailData3(); + Dictionary placeholders = new(); + placeholders.Add(@"[NAME_PORTAL]", "DokumentenPortal"); var expectedOutput = @"Guten Tag Tom,

@@ -39,7 +42,9 @@ namespace EmailProfilerDispatcher.Tests DokumentenPortal"; // Act - var result = EmailOutService.FillTemplate(template, mailData1, mailData2, mailData3); + var result = template + .FillTemplate(placeholders) + .FillTemplate(template, mailData1, mailData2); // Assert Assert.That(result, Is.EqualTo(expectedOutput)); @@ -58,11 +63,5 @@ namespace EmailProfilerDispatcher.Tests [TemplatePlaceholder("[DOCUMENT_TITLE]")] public string DocumentTitle { get; set; } = "Vertragsdokument"; } - - public class MailData3 - { - [TemplatePlaceholder("[NAME_PORTAL]")] - public string NamePortal { get; set; } = "DokumentenPortal"; - } } } \ No newline at end of file