FillTemplate-Methode als Erweiterung hinzugefügt. Option zum Schreiben von Platzhaltern als Wörterbuch hinzugefügt.

This commit is contained in:
Developer 02
2024-06-10 16:19:48 +02:00
parent a8b3e88f09
commit e22d030fa2
4 changed files with 57 additions and 30 deletions

View File

@@ -1,5 +1,6 @@
using DigitalData.Core.API; using DigitalData.Core.API;
using DigitalData.EmailProfilerDispatcher.API.Resources; using DigitalData.EmailProfilerDispatcher.API.Resources;
using DigitalData.EmailProfilerDispatcher.Application;
using DigitalData.EmailProfilerDispatcher.Application.Contracts; using DigitalData.EmailProfilerDispatcher.Application.Contracts;
using DigitalData.EmailProfilerDispatcher.Application.DTOs.EmailOut; using DigitalData.EmailProfilerDispatcher.Application.DTOs.EmailOut;
using DigitalData.EmailProfilerDispatcher.Application.Services; using DigitalData.EmailProfilerDispatcher.Application.Services;
@@ -39,7 +40,7 @@ namespace DigitalData.EmailProfilerGateway.API.Controllers
<br /> <br />
DokumentenPortal"; DokumentenPortal";
var result = EmailOutService<Resource>.FillTemplate(template, mailData); var result = template.FillTemplate(mailData);
return Ok(result); return Ok(result);
} }

View File

@@ -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<DataResult<int>> CreateWithTemplateAsync(EmailOutCreateDto createDto, params object[] models) public async Task<DataResult<int>> CreateWithTemplateAsync(EmailOutCreateDto createDto, params object[] models)
{ {
createDto.EmailSubj = FillTemplate(createDto.EmailSubj, models); createDto.EmailSubj = createDto.EmailSubj.FillTemplate(models);
createDto.EmailBody = FillTemplate(createDto.EmailBody, models); createDto.EmailBody = createDto.EmailBody.FillTemplate(models);
return await base.CreateAsync(createDto); return await base.CreateAsync(createDto);
} }
public static string FillTemplate(string template, params object[] models) public async Task<DataResult<int>> CreateWithTemplateAsync(EmailOutCreateDto createDto, Dictionary<string, string> placeholders, params object[] models)
{ {
foreach(var model in models) createDto.EmailSubj = createDto.EmailSubj.FillTemplate(placeholders);
{ createDto.EmailBody = createDto.EmailBody.FillTemplate(placeholders);
var properties = model.GetType().GetProperties();
foreach (var property in properties) return await CreateWithTemplateAsync(createDto, models: models);
{
var attribute = property.GetCustomAttribute<TemplatePlaceholderAttribute>();
if (attribute != null)
{
var value = property.GetValue(model)?.ToString();
template = template.Replace(attribute.Placeholder, value);
}
}
}
return template;
} }
} }
} }

View File

@@ -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<TemplatePlaceholderAttribute>();
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<string, string> placeholders)
{
foreach (var ph in placeholders)
template = template.Replace(ph.Key, ph.Value);
return template;
}
}
}

View File

@@ -1,6 +1,8 @@
using DigitalData.EmailProfilerDispatcher.Application;
using DigitalData.EmailProfilerDispatcher.Application.Services; using DigitalData.EmailProfilerDispatcher.Application.Services;
using DigitalData.EmailProfilerDispatcher.Domain.Attributes; using DigitalData.EmailProfilerDispatcher.Domain.Attributes;
using DigitalData.EmailProfilerDispatcher.Domain.Entities; using DigitalData.EmailProfilerDispatcher.Domain.Entities;
using System.Diagnostics.Tracing;
namespace EmailProfilerDispatcher.Tests namespace EmailProfilerDispatcher.Tests
{ {
@@ -27,7 +29,8 @@ namespace EmailProfilerDispatcher.Tests
var mailData1 = new MailData1(); var mailData1 = new MailData1();
var mailData2 = new MailData2(); var mailData2 = new MailData2();
var mailData3 = new MailData3(); Dictionary<string, string> placeholders = new();
placeholders.Add(@"[NAME_PORTAL]", "DokumentenPortal");
var expectedOutput = @"Guten Tag Tom,<br /> var expectedOutput = @"Guten Tag Tom,<br />
<br /> <br />
@@ -39,7 +42,9 @@ namespace EmailProfilerDispatcher.Tests
DokumentenPortal"; DokumentenPortal";
// Act // Act
var result = EmailOutService<Resource>.FillTemplate(template, mailData1, mailData2, mailData3); var result = template
.FillTemplate(placeholders)
.FillTemplate(template, mailData1, mailData2);
// Assert // Assert
Assert.That(result, Is.EqualTo(expectedOutput)); Assert.That(result, Is.EqualTo(expectedOutput));
@@ -58,11 +63,5 @@ namespace EmailProfilerDispatcher.Tests
[TemplatePlaceholder("[DOCUMENT_TITLE]")] [TemplatePlaceholder("[DOCUMENT_TITLE]")]
public string DocumentTitle { get; set; } = "Vertragsdokument"; public string DocumentTitle { get; set; } = "Vertragsdokument";
} }
public class MailData3
{
[TemplatePlaceholder("[NAME_PORTAL]")]
public string NamePortal { get; set; } = "DokumentenPortal";
}
} }
} }