diff --git a/src/ReC.Application/Common/Options/DbModel/DbModelOptions.cs b/src/ReC.Application/Common/Options/DbModel/DbModelOptions.cs index ff3874d..47d8ea1 100644 --- a/src/ReC.Application/Common/Options/DbModel/DbModelOptions.cs +++ b/src/ReC.Application/Common/Options/DbModel/DbModelOptions.cs @@ -1,6 +1,20 @@ +using ReC.Application.Common.Exceptions; + namespace ReC.Application.Common.Options.DbModel; public class DbModelOptions { public Dictionary Entities { get; set; } = []; + + public EntityOptions this[string entityName] + { + get + { + if (Entities.TryGetValue(entityName, out var entity)) + return entity; + + throw new DbModelConfigurationException( + $"Entity '{entityName}' is not configured in DbModel options."); + } + } } diff --git a/src/ReC.Application/Common/Options/DbModel/DbModelOptionsExtensions.cs b/src/ReC.Application/Common/Options/DbModel/DbModelOptionsExtensions.cs deleted file mode 100644 index e16a68a..0000000 --- a/src/ReC.Application/Common/Options/DbModel/DbModelOptionsExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -using ReC.Application.Common.Exceptions; - -namespace ReC.Application.Common.Options.DbModel; - -public static class DbModelOptionsExtensions -{ - public static EntityOptions GetEntity(this DbModelOptions options, string entityName) - { - if (options.Entities.TryGetValue(entityName, out var entity)) - return entity; - - throw new DbModelConfigurationException( - $"Entity '{entityName}' is not configured in DbModel options."); - } - - public static string GetColumn(this EntityOptions entity, string entityName, string propertyName) - { - if (entity.ColumnMappings.TryGetValue(propertyName, out var columnName)) - return columnName; - - var viewDisplay = entity.Name ?? entityName; - throw new DbModelConfigurationException( - $"Column mapping for property '{propertyName}' is not configured for entity '{viewDisplay}'."); - } -} diff --git a/src/ReC.Application/Common/Options/DbModel/EntityOptions.cs b/src/ReC.Application/Common/Options/DbModel/EntityOptions.cs index 6b551d0..8d79bc1 100644 --- a/src/ReC.Application/Common/Options/DbModel/EntityOptions.cs +++ b/src/ReC.Application/Common/Options/DbModel/EntityOptions.cs @@ -1,3 +1,5 @@ +using ReC.Application.Common.Exceptions; + namespace ReC.Application.Common.Options.DbModel; public class EntityOptions @@ -7,4 +9,17 @@ public class EntityOptions public string Schema { get; set; } = "dbo"; public Dictionary ColumnMappings { get; set; } = []; + + public string this[string propertyName] + { + get + { + if (ColumnMappings.TryGetValue(propertyName, out var columnName)) + return columnName; + + var viewDisplay = Name ?? "unknown"; + throw new DbModelConfigurationException( + $"Column mapping for property '{propertyName}' is not configured for entity '{viewDisplay}'."); + } + } } diff --git a/src/ReC.Infrastructure/RecDbContext.cs b/src/ReC.Infrastructure/RecDbContext.cs index 641b0cf..790bdf8 100644 --- a/src/ReC.Infrastructure/RecDbContext.cs +++ b/src/ReC.Infrastructure/RecDbContext.cs @@ -39,47 +39,46 @@ public class RecDbContext(DbContextOptions options, IOptions(b => { b.ToView(opt.Name, opt.Schema); b.HasKey(e => e.Id); - b.Property(e => e.Id).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.Id))); - b.Property(e => e.ProfileId).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.ProfileId))); - b.Property(e => e.ProfileName).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.ProfileName))); - b.Property(e => e.ProfileType).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.ProfileType))); - b.Property(e => e.Sequence).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.Sequence))); - b.Property(e => e.EndpointId).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointId))); - b.Property(e => e.EndpointUri).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointUri))); - b.Property(e => e.EndpointAuthId).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthId))); - b.Property(e => e.EndpointAuthType).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthType))); - b.Property(e => e.EndpointAuthTypeName).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthTypeName))); - b.Property(e => e.EndpointAuthApiKey).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthApiKey))); - b.Property(e => e.EndpointAuthApiValue).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthApiValue))); - b.Property(e => e.EndpointAuthApiKeyAddTo).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthApiKeyAddTo))); - b.Property(e => e.EndpointAuthApiKeyAddToName).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthApiKeyAddToName))); - b.Property(e => e.EndpointAuthToken).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthToken))); - b.Property(e => e.EndpointAuthUsername).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthUsername))); - b.Property(e => e.EndpointAuthPassword).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthPassword))); - b.Property(e => e.EndpointAuthDomain).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthDomain))); - b.Property(e => e.EndpointAuthWorkstation).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointAuthWorkstation))); - b.Property(e => e.EndpointParamsId).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.EndpointParamsId))); - b.Property(e => e.SqlConnectionId).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.SqlConnectionId))); - b.Property(e => e.SqlConnectionServer).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.SqlConnectionServer))); - b.Property(e => e.SqlConnectionDb).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.SqlConnectionDb))); - b.Property(e => e.SqlConnectionUsername).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.SqlConnectionUsername))); - b.Property(e => e.SqlConnectionPassword).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.SqlConnectionPassword))); - b.Property(e => e.RestType).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.RestType))); - b.Property(e => e.RestTypeName).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.RestTypeName))); - b.Property(e => e.PreprocessingQuery).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.PreprocessingQuery))); - b.Property(e => e.HeaderQuery).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.HeaderQuery))); - b.Property(e => e.BodyQuery).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.BodyQuery))); - b.Property(e => e.PostprocessingQuery).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.PostprocessingQuery))); - b.Property(e => e.ErrorAction).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.ErrorAction))); - b.Property(e => e.ErrorActionName).HasColumnName(opt.GetColumn(entityName, nameof(RecActionView.ErrorActionName))); + b.Property(e => e.Id).HasColumnName(opt[nameof(RecActionView.Id)]); + b.Property(e => e.ProfileId).HasColumnName(opt[nameof(RecActionView.ProfileId)]); + b.Property(e => e.ProfileName).HasColumnName(opt[nameof(RecActionView.ProfileName)]); + b.Property(e => e.ProfileType).HasColumnName(opt[nameof(RecActionView.ProfileType)]); + b.Property(e => e.Sequence).HasColumnName(opt[nameof(RecActionView.Sequence)]); + b.Property(e => e.EndpointId).HasColumnName(opt[nameof(RecActionView.EndpointId)]); + b.Property(e => e.EndpointUri).HasColumnName(opt[nameof(RecActionView.EndpointUri)]); + b.Property(e => e.EndpointAuthId).HasColumnName(opt[nameof(RecActionView.EndpointAuthId)]); + b.Property(e => e.EndpointAuthType).HasColumnName(opt[nameof(RecActionView.EndpointAuthType)]); + b.Property(e => e.EndpointAuthTypeName).HasColumnName(opt[nameof(RecActionView.EndpointAuthTypeName)]); + b.Property(e => e.EndpointAuthApiKey).HasColumnName(opt[nameof(RecActionView.EndpointAuthApiKey)]); + b.Property(e => e.EndpointAuthApiValue).HasColumnName(opt[nameof(RecActionView.EndpointAuthApiValue)]); + b.Property(e => e.EndpointAuthApiKeyAddTo).HasColumnName(opt[nameof(RecActionView.EndpointAuthApiKeyAddTo)]); + b.Property(e => e.EndpointAuthApiKeyAddToName).HasColumnName(opt[nameof(RecActionView.EndpointAuthApiKeyAddToName)]); + b.Property(e => e.EndpointAuthToken).HasColumnName(opt[nameof(RecActionView.EndpointAuthToken)]); + b.Property(e => e.EndpointAuthUsername).HasColumnName(opt[nameof(RecActionView.EndpointAuthUsername)]); + b.Property(e => e.EndpointAuthPassword).HasColumnName(opt[nameof(RecActionView.EndpointAuthPassword)]); + b.Property(e => e.EndpointAuthDomain).HasColumnName(opt[nameof(RecActionView.EndpointAuthDomain)]); + b.Property(e => e.EndpointAuthWorkstation).HasColumnName(opt[nameof(RecActionView.EndpointAuthWorkstation)]); + b.Property(e => e.EndpointParamsId).HasColumnName(opt[nameof(RecActionView.EndpointParamsId)]); + b.Property(e => e.SqlConnectionId).HasColumnName(opt[nameof(RecActionView.SqlConnectionId)]); + b.Property(e => e.SqlConnectionServer).HasColumnName(opt[nameof(RecActionView.SqlConnectionServer)]); + b.Property(e => e.SqlConnectionDb).HasColumnName(opt[nameof(RecActionView.SqlConnectionDb)]); + b.Property(e => e.SqlConnectionUsername).HasColumnName(opt[nameof(RecActionView.SqlConnectionUsername)]); + b.Property(e => e.SqlConnectionPassword).HasColumnName(opt[nameof(RecActionView.SqlConnectionPassword)]); + b.Property(e => e.RestType).HasColumnName(opt[nameof(RecActionView.RestType)]); + b.Property(e => e.RestTypeName).HasColumnName(opt[nameof(RecActionView.RestTypeName)]); + b.Property(e => e.PreprocessingQuery).HasColumnName(opt[nameof(RecActionView.PreprocessingQuery)]); + b.Property(e => e.HeaderQuery).HasColumnName(opt[nameof(RecActionView.HeaderQuery)]); + b.Property(e => e.BodyQuery).HasColumnName(opt[nameof(RecActionView.BodyQuery)]); + b.Property(e => e.PostprocessingQuery).HasColumnName(opt[nameof(RecActionView.PostprocessingQuery)]); + b.Property(e => e.ErrorAction).HasColumnName(opt[nameof(RecActionView.ErrorAction)]); + b.Property(e => e.ErrorActionName).HasColumnName(opt[nameof(RecActionView.ErrorActionName)]); b.HasMany(e => e.Results) .WithOne(r => r.Action) @@ -89,61 +88,59 @@ public class RecDbContext(DbContextOptions options, IOptions(b => { b.ToView(opt.Name, opt.Schema); b.HasKey(e => e.Id); - b.Property(e => e.Id).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.Id))); - b.Property(e => e.Active).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.Active))); - b.Property(e => e.TypeId).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.TypeId))); - b.Property(e => e.Type).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.Type))); - b.Property(e => e.Mandantor).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.Mandantor))); - b.Property(e => e.ProfileName).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.ProfileName))); - b.Property(e => e.Description).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.Description))); - b.Property(e => e.LogLevelId).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.LogLevelId))); - b.Property(e => e.LogLevel).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.LogLevel))); - b.Property(e => e.LanguageId).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.LanguageId))); - b.Property(e => e.Language).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.Language))); - b.Property(e => e.AddedWho).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.AddedWho))); - b.Property(e => e.AddedWhen).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.AddedWhen))); - b.Property(e => e.ChangedWho).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.ChangedWho))); - b.Property(e => e.ChangedWhen).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.ChangedWhen))); - b.Property(e => e.FirstRun).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.FirstRun))); - b.Property(e => e.LastRun).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.LastRun))); - b.Property(e => e.LastResult).HasColumnName(opt.GetColumn(entityName, nameof(ProfileView.LastResult))); + b.Property(e => e.Id).HasColumnName(opt[nameof(ProfileView.Id)]); + b.Property(e => e.Active).HasColumnName(opt[nameof(ProfileView.Active)]); + b.Property(e => e.TypeId).HasColumnName(opt[nameof(ProfileView.TypeId)]); + b.Property(e => e.Type).HasColumnName(opt[nameof(ProfileView.Type)]); + b.Property(e => e.Mandantor).HasColumnName(opt[nameof(ProfileView.Mandantor)]); + b.Property(e => e.ProfileName).HasColumnName(opt[nameof(ProfileView.ProfileName)]); + b.Property(e => e.Description).HasColumnName(opt[nameof(ProfileView.Description)]); + b.Property(e => e.LogLevelId).HasColumnName(opt[nameof(ProfileView.LogLevelId)]); + b.Property(e => e.LogLevel).HasColumnName(opt[nameof(ProfileView.LogLevel)]); + b.Property(e => e.LanguageId).HasColumnName(opt[nameof(ProfileView.LanguageId)]); + b.Property(e => e.Language).HasColumnName(opt[nameof(ProfileView.Language)]); + b.Property(e => e.AddedWho).HasColumnName(opt[nameof(ProfileView.AddedWho)]); + b.Property(e => e.AddedWhen).HasColumnName(opt[nameof(ProfileView.AddedWhen)]); + b.Property(e => e.ChangedWho).HasColumnName(opt[nameof(ProfileView.ChangedWho)]); + b.Property(e => e.ChangedWhen).HasColumnName(opt[nameof(ProfileView.ChangedWhen)]); + b.Property(e => e.FirstRun).HasColumnName(opt[nameof(ProfileView.FirstRun)]); + b.Property(e => e.LastRun).HasColumnName(opt[nameof(ProfileView.LastRun)]); + b.Property(e => e.LastResult).HasColumnName(opt[nameof(ProfileView.LastResult)]); }); } private void ConfigureResultView(ModelBuilder modelBuilder) { - const string entityName = nameof(ResultView); - var opt = _dbModelOptions.GetEntity(entityName); + var opt = _dbModelOptions[nameof(ResultView)]; modelBuilder.Entity(b => { b.ToView(opt.Name, opt.Schema); b.HasKey(e => e.Id); - b.Property(e => e.Id).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.Id))); - b.Property(e => e.ActionId).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.ActionId))); - b.Property(e => e.ProfileId).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.ProfileId))); - b.Property(e => e.ProfileName).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.ProfileName))); - b.Property(e => e.StatusCode).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.StatusCode))); - b.Property(e => e.StatusName).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.StatusName))); - b.Property(e => e.Type).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.Type))); - b.Property(e => e.TypeName).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.TypeName))); - b.Property(e => e.Header).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.Header))); - b.Property(e => e.Body).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.Body))); - b.Property(e => e.Info).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.Info))); - b.Property(e => e.Error).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.Error))); - b.Property(e => e.AddedWho).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.AddedWho))); - b.Property(e => e.AddedWhen).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.AddedWhen))); - b.Property(e => e.ChangedWho).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.ChangedWho))); - b.Property(e => e.ChangedWhen).HasColumnName(opt.GetColumn(entityName, nameof(ResultView.ChangedWhen))); + b.Property(e => e.Id).HasColumnName(opt[nameof(ResultView.Id)]); + b.Property(e => e.ActionId).HasColumnName(opt[nameof(ResultView.ActionId)]); + b.Property(e => e.ProfileId).HasColumnName(opt[nameof(ResultView.ProfileId)]); + b.Property(e => e.ProfileName).HasColumnName(opt[nameof(ResultView.ProfileName)]); + b.Property(e => e.StatusCode).HasColumnName(opt[nameof(ResultView.StatusCode)]); + b.Property(e => e.StatusName).HasColumnName(opt[nameof(ResultView.StatusName)]); + b.Property(e => e.Type).HasColumnName(opt[nameof(ResultView.Type)]); + b.Property(e => e.TypeName).HasColumnName(opt[nameof(ResultView.TypeName)]); + b.Property(e => e.Header).HasColumnName(opt[nameof(ResultView.Header)]); + b.Property(e => e.Body).HasColumnName(opt[nameof(ResultView.Body)]); + b.Property(e => e.Info).HasColumnName(opt[nameof(ResultView.Info)]); + b.Property(e => e.Error).HasColumnName(opt[nameof(ResultView.Error)]); + b.Property(e => e.AddedWho).HasColumnName(opt[nameof(ResultView.AddedWho)]); + b.Property(e => e.AddedWhen).HasColumnName(opt[nameof(ResultView.AddedWhen)]); + b.Property(e => e.ChangedWho).HasColumnName(opt[nameof(ResultView.ChangedWho)]); + b.Property(e => e.ChangedWhen).HasColumnName(opt[nameof(ResultView.ChangedWhen)]); b.HasOne(r => r.Action) .WithMany(a => a.Results) @@ -157,37 +154,34 @@ public class RecDbContext(DbContextOptions options, IOptions(b => { b.HasNoKey(); - b.Property(e => e.RawHeader).HasColumnName(opt.GetColumn(entityName, nameof(HeaderQueryResult.RawHeader))); + b.Property(e => e.RawHeader).HasColumnName(opt[nameof(HeaderQueryResult.RawHeader)]); }); } private void ConfigureBodyQueryResult(ModelBuilder modelBuilder) { - const string entityName = nameof(BodyQueryResult); - var opt = _dbModelOptions.GetEntity(entityName); + var opt = _dbModelOptions[nameof(BodyQueryResult)]; modelBuilder.Entity(b => { b.HasNoKey(); - b.Property(e => e.RawBody).HasColumnName(opt.GetColumn(entityName, nameof(BodyQueryResult.RawBody))); + b.Property(e => e.RawBody).HasColumnName(opt[nameof(BodyQueryResult.RawBody)]); }); } private void ConfigureInsertObjectResult(ModelBuilder modelBuilder) { - const string entityName = nameof(InsertObjectResult); - var opt = _dbModelOptions.GetEntity(entityName); + var opt = _dbModelOptions[nameof(InsertObjectResult)]; modelBuilder.Entity(b => { b.HasNoKey(); - b.Property(e => e.NewObjectId).HasColumnName(opt.GetColumn(entityName, nameof(InsertObjectResult.NewObjectId))); + b.Property(e => e.NewObjectId).HasColumnName(opt[nameof(InsertObjectResult.NewObjectId)]); }); } } \ No newline at end of file