feat: E-Mail-Vorlagenverarbeitung hinzufügen
- Methode `FillTemplate` für Platzhalterersetzung hinzugefügt. - `TemplatePlaceholderAttribute` eingeführt. - `EmailOutService` mit Vorlagenmethoden aktualisiert. - Unit-Tests für Vorlagenverarbeitung hinzugefügt.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using DigitalData.Core.Contracts.Application;
|
||||
using DigitalData.Core.DTO;
|
||||
using DigitalData.EmailProfilerDispatcher.Application.DTOs.EmailOut;
|
||||
using DigitalData.EmailProfilerDispatcher.Domain.Entities;
|
||||
using DigitalData.EmailProfilerDispatcher.Infrastructure.Contracts;
|
||||
@@ -7,5 +8,6 @@ namespace DigitalData.EmailProfilerDispatcher.Application.Contracts
|
||||
{
|
||||
public interface IEmailOutService : ICRUDService<IEmailOutRepository, EmailOutCreateDto, EmailOutDto, EmailOutDto, EmailOut, int>
|
||||
{
|
||||
}
|
||||
Task<DataResult<int>> CreateWithTemplateAsync(EmailOutCreateDto createDto, params object[] models);
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,25 @@
|
||||
namespace DigitalData.EmailProfilerDispatcher.Application.DTOs.EmailOut
|
||||
{
|
||||
public record EmailOutCreateDto(
|
||||
int ReminderTypeId,
|
||||
int SendingProfile,
|
||||
int ReferenceId,
|
||||
string? ReferenceString,
|
||||
int? EntityId,
|
||||
int WfId,
|
||||
string? WfReference,
|
||||
string EmailAddress,
|
||||
string EmailSubj,
|
||||
string EmailBody,
|
||||
string? EmailAttmt1,
|
||||
DateTime? EmailSent,
|
||||
string? Comment,
|
||||
string? AddedWho, // Default value will be 'DEFAULT', made nullable
|
||||
string? ChangedWho,
|
||||
DateTime? ChangedWhen,
|
||||
DateTime? ErrorTimestamp,
|
||||
string? ErrorMsg
|
||||
);
|
||||
}
|
||||
public record EmailOutCreateDto
|
||||
{
|
||||
public int ReminderTypeId { get; set; }
|
||||
public int SendingProfile { get; set; }
|
||||
public int ReferenceId { get; set; }
|
||||
public int WfId { get; set; }
|
||||
public string EmailAddress { get; set; }
|
||||
public string EmailSubj { get; set; }
|
||||
public string EmailBody { get; set; }
|
||||
public string? ReferenceString { get; set; } = null;
|
||||
public int? EntityId { get; set; } = null;
|
||||
public string? WfReference { get; set; } = null;
|
||||
public string? EmailAttmt1 { get; set; } = null;
|
||||
public DateTime? EmailSent { get; set; } = null;
|
||||
public string? Comment { get; set; } = null;
|
||||
public string? AddedWho { get; set; } = "DEFAULT";
|
||||
public string? ChangedWho { get; set; } = null;
|
||||
public DateTime? ChangedWhen { get; set; } = null;
|
||||
public DateTime? ErrorTimestamp { get; set; } = null;
|
||||
public string? ErrorMsg { get; set; } = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
using AutoMapper;
|
||||
using DigitalData.Core.Application;
|
||||
using DigitalData.Core.DTO;
|
||||
using DigitalData.EmailProfilerDispatcher.Application.Contracts;
|
||||
using DigitalData.EmailProfilerDispatcher.Application.DTOs.EmailOut;
|
||||
using DigitalData.EmailProfilerDispatcher.Domain.Attributes;
|
||||
using DigitalData.EmailProfilerDispatcher.Domain.Entities;
|
||||
using DigitalData.EmailProfilerDispatcher.Infrastructure.Contracts;
|
||||
using Microsoft.Extensions.Localization;
|
||||
using System.Reflection;
|
||||
|
||||
namespace DigitalData.EmailProfilerDispatcher.Application.Services
|
||||
{
|
||||
@@ -13,5 +16,36 @@ namespace DigitalData.EmailProfilerDispatcher.Application.Services
|
||||
public EmailOutService(IEmailOutRepository repository, IStringLocalizer<TResource> localizer, IMapper mapper) : base(repository, localizer, mapper)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public string ApplyTemplate(string template, params object[] models) => FillTemplate(template: template, models: models);
|
||||
|
||||
public async Task<DataResult<int>> CreateWithTemplateAsync(EmailOutCreateDto createDto, params object[] models)
|
||||
{
|
||||
createDto.EmailSubj = FillTemplate(createDto.EmailSubj, models);
|
||||
createDto.EmailBody = FillTemplate(createDto.EmailBody, models);
|
||||
|
||||
return await base.CreateAsync(createDto);
|
||||
}
|
||||
|
||||
public static string FillTemplate(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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user