refactor(EGDbContext): AddTrigger zur Konfiguration von Triggern über appsettings.json erstellt und implementiert

This commit is contained in:
Developer 02 2025-02-12 21:11:08 +01:00
parent 4615205aa5
commit f9c34ef8fd

View File

@ -7,12 +7,16 @@ using Microsoft.EntityFrameworkCore;
using Group = DigitalData.UserManager.Domain.Entities.Group; using Group = DigitalData.UserManager.Domain.Entities.Group;
using Module = DigitalData.UserManager.Domain.Entities.Module; using Module = DigitalData.UserManager.Domain.Entities.Module;
using DigitalData.EmailProfilerDispatcher; using DigitalData.EmailProfilerDispatcher;
using Microsoft.Extensions.Options;
using EnvelopeGenerator.Application.Configurations;
using DigitalData.Core.Client;
using Microsoft.Extensions.Logging;
namespace EnvelopeGenerator.Infrastructure namespace EnvelopeGenerator.Infrastructure;
//TODO: Adding EmailOut instead of EmailOut.Abst is not correct for the arch. Re-design EmailPut consedering this. IMailDbContext shoud move to Abstraction layer (hint: in this case using DBSet in abst. will be problem because entity framework will have to be added.
public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
{ {
//TODO: Adding EmailOut instead of EmailOut.Abst is not correct for the arch. Re-design EmailPut consedering this. IMailDbContext shoud move to Abstraction layer (hint: in this case using DBSet in abst. will be problem because entity framework will have to be added.
public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
{
public DbSet<UserReceiver> UserReceivers { get; set; } public DbSet<UserReceiver> UserReceivers { get; set; }
public DbSet<Config> Configs { get; set; } public DbSet<Config> Configs { get; set; }
@ -53,8 +57,15 @@ namespace EnvelopeGenerator.Infrastructure
public DbSet<EnvelopeReceiverReadOnly> EnvelopeReceiverReadOnlys { get; set; } public DbSet<EnvelopeReceiverReadOnly> EnvelopeReceiverReadOnlys { get; set; }
public EGDbContext(DbContextOptions<EGDbContext> options) : base(options) private readonly DbTriggerParams _triggers;
private readonly ILogger<EGDbContext> _logger;
public EGDbContext(DbContextOptions<EGDbContext> options, IOptions<DbTriggerParams> triggerParamOptions, ILogger<EGDbContext> logger) : base(options)
{ {
_triggers = triggerParamOptions.Value;
_logger = logger;
UserReceivers = Set<UserReceiver>(); UserReceivers = Set<UserReceiver>();
Configs = Set<Config>(); Configs = Set<Config>();
EnvelopeReceivers = Set<EnvelopeReceiver>(); EnvelopeReceivers = Set<EnvelopeReceiver>();
@ -142,10 +153,34 @@ namespace EnvelopeGenerator.Infrastructure
modelBuilder.Entity<EmailOut>().ToTable(tb => tb.HasTrigger("TBEMLP_EMAIL_OUT_AFT_UPD")); modelBuilder.Entity<EmailOut>().ToTable(tb => tb.HasTrigger("TBEMLP_EMAIL_OUT_AFT_UPD"));
modelBuilder.Entity<EnvelopeReceiverReadOnly>().ToTable(tb => tb.HasTrigger("TBSIG_ENVELOPE_RECEIVER_READ_ONLY_UPD")); modelBuilder.Entity<EnvelopeReceiverReadOnly>().ToTable(tb => tb.HasTrigger("TBSIG_ENVELOPE_RECEIVER_READ_ONLY_UPD"));
void AddTrigger<T>() where T : class => _triggers
.Where(t => t.Key == typeof(T).Name)
.SelectMany(t => t.Value)
.ForEach(tName =>
{
modelBuilder.Entity<T>().ToTable(tb => tb.HasTrigger(tName));
_logger.LogInformation("Trigger '{triggerName}' has been added to the '{entityName}' entity.", tName, typeof(T).Name);
});
// TODO: call add trigger methods with attributes and reflection
AddTrigger<Config>();
AddTrigger<DocumentReceiverElement>();
AddTrigger<DocumentStatus>();
AddTrigger<EmailTemplate>();
AddTrigger<Envelope>();
AddTrigger<EnvelopeCertificate>();
AddTrigger<EnvelopeDocument>();
AddTrigger<EnvelopeHistory>();
AddTrigger<EnvelopeReceiver>();
AddTrigger<EnvelopeReceiverReadOnly>();
AddTrigger<EnvelopeType>();
AddTrigger<Receiver>();
AddTrigger<UserReceiver>();
AddTrigger<EmailOut>();
//configure model builder for user manager tables //configure model builder for user manager tables
modelBuilder.ConfigureUserManager(); modelBuilder.ConfigureUserManager();
base.OnModelCreating(modelBuilder); base.OnModelCreating(modelBuilder);
} }
}
} }