using Autofac; using PlanTempus.Core.Database; using PlanTempus.Core.Database.ConnectionFactory; namespace PlanTempus.Database.ModuleRegistry { public class DbPostgreSqlModule : Module { public required string ConnectionString { get; set; } protected override void Load(ContainerBuilder builder) { Insight.Database.Providers.PostgreSQL.PostgreSQLInsightDbProvider.RegisterProvider(); Insight.Database.ColumnMapping.Tables.AddMapper(new SnakeCaseToPascalCaseMapper()); builder.RegisterType() .As() .WithParameter(new TypedParameter(typeof(string), ConnectionString)) .SingleInstance(); builder.RegisterType() .As(); } } public class SnakeCaseToPascalCaseMapper : Insight.Database.Mapping.IColumnMapper { public string MapColumn(Type type, System.Data.IDataReader reader, int column) { string databaseName = reader.GetName(column); var parts = databaseName.Split(['_'], StringSplitOptions.RemoveEmptyEntries); var pascalName = string.Concat(parts.Select(p => p.Substring(0, 1).ToUpper() + p.Substring(1).ToLower() )); return pascalName; } } }