Refactor: Projekt von DigitalData.EmailProfilerDispatcher.Application in DigitalData.EmailProfilerDispatcher umbenannt, um die Struktur zu vereinfachen und die Abstraktion zu verbessern
This commit is contained in:
20
DigitalData.EmailProfilerDispatcher/DIExtensions.cs
Normal file
20
DigitalData.EmailProfilerDispatcher/DIExtensions.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
||||
using DigitalData.EmailProfilerDispatcher.Repositories;
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Services;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace DigitalData.EmailProfilerDispatcher
|
||||
{
|
||||
public static class DIExtensions
|
||||
{
|
||||
public static IServiceCollection AddDispatcher<TDbContext>(this IServiceCollection services) where TDbContext : DbContext => services
|
||||
.AddScoped<IEmailOutRepository, EmailOutRepository<TDbContext>>()
|
||||
.AddAutoMapper(typeof(MappingProfile).Assembly)
|
||||
.AddScoped<IEmailOutService, EmailOutService>();
|
||||
|
||||
public static IServiceCollection AddDispatcher<TResource>(this IServiceCollection services, Action<DbContextOptionsBuilder> options) => services
|
||||
.AddDbContext<DefaultMailDbContext>(options)
|
||||
.AddDispatcher<DefaultMailDbContext>();
|
||||
}
|
||||
}
|
||||
21
DigitalData.EmailProfilerDispatcher/DefaultMailDbContext.cs
Normal file
21
DigitalData.EmailProfilerDispatcher/DefaultMailDbContext.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace DigitalData.EmailProfilerDispatcher
|
||||
{
|
||||
public class DefaultMailDbContext : DbContext
|
||||
{
|
||||
public DbSet<EmailOut> EMailOuts { get; set; }
|
||||
|
||||
public DefaultMailDbContext(DbContextOptions options) : base(options)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
base.OnModelCreating(modelBuilder);
|
||||
|
||||
modelBuilder.Entity<EmailOut>().ToTable("TBEMLP_EMAIL_OUT");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||
<PackageReference Include="DigitalData.Core.Abstractions" Version="1.0.1.1" />
|
||||
<PackageReference Include="DigitalData.Core.Application" Version="1.0.0" />
|
||||
<PackageReference Include="DigitalData.Core.Infrastructure" Version="1.0.1.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.16" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.16" />
|
||||
<PackageReference Include="Microsoft.Extensions.Localization" Version="7.0.19" />
|
||||
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="7.0.19" />
|
||||
<PackageReference Include="WebCore.Abstractions" Version="1.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\DigitalData.EmailProfilerDispatcher.Abstraction\DigitalData.EmailProfilerDispatcher.Abstraction.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
18
DigitalData.EmailProfilerDispatcher/MappingProfile.cs
Normal file
18
DigitalData.EmailProfilerDispatcher/MappingProfile.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using AutoMapper;
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.DTOs.EmailOut;
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Entities;
|
||||
|
||||
namespace DigitalData.EmailProfilerDispatcher
|
||||
{
|
||||
public class MappingProfile : Profile
|
||||
{
|
||||
public MappingProfile()
|
||||
{
|
||||
CreateMap<EmailOutDto, EmailOut>();
|
||||
CreateMap<EmailOutCreateDto, EmailOut>();
|
||||
|
||||
CreateMap<EmailOut, EmailOutDto>();
|
||||
CreateMap<EmailOut, EmailOutCreateDto>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using DigitalData.Core.Infrastructure;
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace DigitalData.EmailProfilerDispatcher.Repositories
|
||||
{
|
||||
public class EmailOutRepository<TDbContext> : CRUDRepository<EmailOut, int, TDbContext>, IEmailOutRepository
|
||||
where TDbContext : DbContext
|
||||
{
|
||||
public EmailOutRepository(TDbContext dbContext) : base(dbContext)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using AutoMapper;
|
||||
using DigitalData.Core.Application;
|
||||
using DigitalData.Core.DTO;
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Contracts;
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.DTOs.EmailOut;
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Entities;
|
||||
|
||||
namespace DigitalData.EmailProfilerDispatcher.Abstraction.Services
|
||||
{
|
||||
public class EmailOutService : CRUDService<IEmailOutRepository, EmailOutCreateDto, EmailOutDto, EmailOutDto, EmailOut, int>, IEmailOutService
|
||||
{
|
||||
public EmailOutService(IEmailOutRepository repository, IMapper mapper) : base(repository, mapper)
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<DataResult<int>> CreateWithTemplateAsync(EmailOutCreateDto createDto, params object[] models)
|
||||
{
|
||||
createDto.EmailSubj = createDto.EmailSubj.FillTemplate(models);
|
||||
createDto.EmailBody = createDto.EmailBody.FillTemplate(models);
|
||||
|
||||
return await base.CreateAsync(createDto);
|
||||
}
|
||||
|
||||
public async Task<DataResult<int>> CreateWithTemplateAsync(EmailOutCreateDto createDto, Dictionary<string, string> placeholders, params object[] models)
|
||||
{
|
||||
createDto.EmailSubj = createDto.EmailSubj.FillTemplate(placeholders);
|
||||
createDto.EmailBody = createDto.EmailBody.FillTemplate(placeholders);
|
||||
|
||||
return await CreateWithTemplateAsync(createDto, models: models);
|
||||
}
|
||||
}
|
||||
}
|
||||
37
DigitalData.EmailProfilerDispatcher/TemplateExtensions.cs
Normal file
37
DigitalData.EmailProfilerDispatcher/TemplateExtensions.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
|
||||
using System.Reflection;
|
||||
|
||||
namespace DigitalData.EmailProfilerDispatcher
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user