From 53a656f6ee4ae8e42177071cd7fdc306b55bc75a Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 1 Oct 2025 12:59:55 +0200 Subject: [PATCH] move DbTriggerParams to Infrastructure layer. - createConfig for flexable configuration --- .../Common/Configurations/DbTriggerParams.cs | 8 ------ .../DependencyInjection.cs | 1 - .../DbTriggerParams.cs | 18 +++++++++++++ .../DependencyExtensions.cs | 25 +++++++++++++++++++ .../EGDbContext.cs | 11 ++++++-- .../EnumerableExtensions.cs | 20 +++++++++++++++ .../Repositories/ConfigRepository.cs | 5 ++-- EnvelopeGenerator.Web/Program.cs | 18 +++++++------ 8 files changed, 84 insertions(+), 22 deletions(-) delete mode 100644 EnvelopeGenerator.Application/Common/Configurations/DbTriggerParams.cs create mode 100644 EnvelopeGenerator.Infrastructure/DbTriggerParams.cs create mode 100644 EnvelopeGenerator.Infrastructure/EnumerableExtensions.cs diff --git a/EnvelopeGenerator.Application/Common/Configurations/DbTriggerParams.cs b/EnvelopeGenerator.Application/Common/Configurations/DbTriggerParams.cs deleted file mode 100644 index ce01836b..00000000 --- a/EnvelopeGenerator.Application/Common/Configurations/DbTriggerParams.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace EnvelopeGenerator.Application.Common.Configurations; - -/// -/// -/// -public class DbTriggerParams : Dictionary> -{ -} \ No newline at end of file diff --git a/EnvelopeGenerator.Application/DependencyInjection.cs b/EnvelopeGenerator.Application/DependencyInjection.cs index 0cff0c7a..ef9838a1 100644 --- a/EnvelopeGenerator.Application/DependencyInjection.cs +++ b/EnvelopeGenerator.Application/DependencyInjection.cs @@ -46,7 +46,6 @@ public static class DependencyInjection services.Configure(config.GetSection(nameof(MailParams))); services.Configure(config.GetSection(nameof(AuthenticatorParams))); services.Configure(config.GetSection(nameof(TotpSmsParams))); - services.Configure(config.GetSection(nameof(DbTriggerParams))); services.AddHttpClientService(config.GetSection(nameof(GtxMessagingParams))); services.TryAddSingleton(); diff --git a/EnvelopeGenerator.Infrastructure/DbTriggerParams.cs b/EnvelopeGenerator.Infrastructure/DbTriggerParams.cs new file mode 100644 index 00000000..9b8ff967 --- /dev/null +++ b/EnvelopeGenerator.Infrastructure/DbTriggerParams.cs @@ -0,0 +1,18 @@ +#if NETFRAMEWORK +using System.Collections.Generic; +#endif + +namespace EnvelopeGenerator.Infrastructure +#if NET + ; +#elif NETFRAMEWORK +{ +#endif + +public class DbTriggerParams : Dictionary> +{ +} + +#if NETFRAMEWORK +} +#endif \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs b/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs index 88fba5ab..c25bc014 100644 --- a/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs +++ b/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs @@ -9,6 +9,7 @@ using System.ComponentModel.DataAnnotations.Schema; using System.Reflection; using DigitalData.UserManager.Domain.Entities; #if NET +using CommandDotNet.Execution; using EnvelopeGenerator.Infrastructure.Repositories; using EnvelopeGenerator.Infrastructure.Executor; using EnvelopeGenerator.Application.Common.Interfaces.Repositories; @@ -38,6 +39,7 @@ namespace EnvelopeGenerator.Infrastructure /// [Obsolete("Use IRepository")] public static IServiceCollection AddEnvelopeGeneratorInfrastructureServices(this IServiceCollection services, + Action options, Action #if NET ? @@ -49,6 +51,9 @@ namespace EnvelopeGenerator.Infrastructure #endif ) { + // configure custom options + options(new Config(services)); + if (dbContextOptions != null) services.AddDbContext(dbContextOptions); @@ -173,5 +178,25 @@ namespace EnvelopeGenerator.Infrastructure return services; } #endif + + public class Config + { + private readonly IServiceCollection _services; + + internal Config(IServiceCollection services) + { + _services = services; + } + + public void ConfigureDbTriggerParams(IConfiguration configuration) + { + _services.Configure(configuration.GetSection(nameof(DbTriggerParams))); + } + + public void ConfigureDbTriggerParams(Action configureOptions) + { + _services.Configure(configureOptions); + } + } } } \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/EGDbContext.cs b/EnvelopeGenerator.Infrastructure/EGDbContext.cs index cba16fe5..8a103a00 100644 --- a/EnvelopeGenerator.Infrastructure/EGDbContext.cs +++ b/EnvelopeGenerator.Infrastructure/EGDbContext.cs @@ -13,6 +13,7 @@ using DigitalData.UserManager.Infrastructure.Contracts; using DigitalData.Core.Client; using EnvelopeGenerator.Application.Common.Configurations; #elif NETFRAMEWORK +using System.Linq; #endif namespace EnvelopeGenerator.Infrastructure @@ -35,7 +36,7 @@ public abstract class EGDbContextBase : DbContext , IUserManagerDbContext, IMailDbContext #endif { - public DbSet Configs { get; set; } + public DbSet Configs { get; set; } public DbSet EnvelopeReceivers { get; set; } @@ -85,7 +86,11 @@ public abstract class EGDbContextBase : DbContext public bool IsMigration { get; set; } = false; - public EGDbContextBase(DbContextOptions options, IOptions triggerParamOptions, ILogger? logger = null) : base(options) + public EGDbContextBase(DbContextOptions options, IOptions triggerParamOptions, ILogger +#if NET + ? +#endif + logger = null) : base(options) { _triggers = triggerParamOptions.Value; _logger = logger; @@ -213,7 +218,9 @@ public abstract class EGDbContextBase : DbContext .SelectMany(t => t.Value) .ForEach(tName => { +#if NET modelBuilder.Entity().ToTable(tb => tb.HasTrigger(tName)); +#endif _logger?.LogInformation("Trigger '{triggerName}' has been added to the '{entityName}' entity.", tName, typeof(T).Name); }); diff --git a/EnvelopeGenerator.Infrastructure/EnumerableExtensions.cs b/EnvelopeGenerator.Infrastructure/EnumerableExtensions.cs new file mode 100644 index 00000000..668b5815 --- /dev/null +++ b/EnvelopeGenerator.Infrastructure/EnumerableExtensions.cs @@ -0,0 +1,20 @@ +#if NETFRAMEWORK +using System.Collections.Generic; +using System; +#endif + +namespace EnvelopeGenerator.Infrastructure +{ + public static class EnumerableExtensions + { +#if NETFRAMEWORK + public static void ForEach(this IEnumerable values, Action action) + { + foreach (T value in values) + { + action(value); + } + } +#endif + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/Repositories/ConfigRepository.cs b/EnvelopeGenerator.Infrastructure/Repositories/ConfigRepository.cs index 9fd8a76b..c3d088ee 100644 --- a/EnvelopeGenerator.Infrastructure/Repositories/ConfigRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Repositories/ConfigRepository.cs @@ -1,19 +1,18 @@ #if NET using DigitalData.Core.Infrastructure; -using EnvelopeGenerator.Domain.Entities; using Microsoft.EntityFrameworkCore; using EnvelopeGenerator.Application.Common.Interfaces.Repositories; namespace EnvelopeGenerator.Infrastructure.Repositories; [Obsolete("Use IRepository")] -public class ConfigRepository : CRUDRepository, IConfigRepository +public class ConfigRepository : CRUDRepository, IConfigRepository { public ConfigRepository(EGDbContext dbContext) : base(dbContext, dbContext.Configs) { } - public async Task ReadFirstAsync() + public async Task ReadFirstAsync() { var configs = await _dbSet.ToListAsync(); return configs.Count > 0 ? configs[0] : default; diff --git a/EnvelopeGenerator.Web/Program.cs b/EnvelopeGenerator.Web/Program.cs index 9c79ffe8..7904c7ea 100644 --- a/EnvelopeGenerator.Web/Program.cs +++ b/EnvelopeGenerator.Web/Program.cs @@ -103,14 +103,16 @@ try // Add envelope generator services #pragma warning disable CS0618 // Type or member is obsolete - builder.Services.AddEnvelopeGeneratorInfrastructureServices((provider, options) => - { - var logger = provider.GetRequiredService>(); - options.UseSqlServer(connStr) - .LogTo(log => logger.LogInformation("{log}", log), Microsoft.Extensions.Logging.LogLevel.Trace) - .EnableSensitiveDataLogging() - .EnableDetailedErrors(); - }); + builder.Services.AddEnvelopeGeneratorInfrastructureServices( + opt => opt.ConfigureDbTriggerParams(config), + (provider, options) => + { + var logger = provider.GetRequiredService>(); + options.UseSqlServer(connStr) + .LogTo(log => logger.LogInformation("{log}", log), Microsoft.Extensions.Logging.LogLevel.Trace) + .EnableSensitiveDataLogging() + .EnableDetailedErrors(); + }); #pragma warning restore CS0618 // Type or member is obsolete #pragma warning disable CS0618 // Type or member is obsolete