From d53f384cf8516b24f2ae26e0b3378474302e793d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:32:43 +0000 Subject: [PATCH 01/13] Initial plan From a97634b342ac938018defadcefd3cf67ffae05f8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:44:00 +0000 Subject: [PATCH 02/13] Apply options pattern for database connections to Chapter 3 Co-authored-by: kamilbaczek <74410956+kamilbaczek@users.noreply.github.com> --- .../Database/DatabaseModule.cs | 11 ++++++++--- .../Database/DatabaseOptions.cs | 6 ++++++ .../ContractsDatabaseConfiguration.cs | 2 +- .../Database/DatabaseModule.cs | 11 ++++++++--- .../Database/DatabaseOptions.cs | 6 ++++++ .../OffersDatabaseConfiguration.cs | 2 +- .../Database/DatabaseModule.cs | 11 ++++++++--- .../Database/DatabaseOptions.cs | 6 ++++++ .../PassesDatabaseConfiguration.cs | 2 +- .../DataAccess/DatabaseAccessModule.cs | 6 +++++- .../DataAccess/DatabaseConnectionFactory.cs | 12 +++++++++--- .../Fitnet.Reports/DataAccess/DatabaseOptions.cs | 6 ++++++ .../Src/Reports/Fitnet.Reports/ReportsModule.cs | 2 +- .../ReportsDatabaseConfiguration.cs | 3 +-- 14 files changed, 67 insertions(+), 19 deletions(-) create mode 100644 Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseOptions.cs create mode 100644 Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseOptions.cs create mode 100644 Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseOptions.cs create mode 100644 Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseOptions.cs diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseModule.cs b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseModule.cs index ed3c788a..76104b7a 100644 --- a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseModule.cs +++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseModule.cs @@ -4,16 +4,21 @@ namespace EvolutionaryArchitecture.Fitnet.Contracts.Infrastructure.Database; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Repositories; internal static class DatabaseModule { - private const string ConnectionStringName = "Contracts"; + private const string DatabaseConfigurationSection = "Database"; internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration) { - var connectionString = configuration.GetConnectionString(ConnectionStringName); - services.AddDbContext(options => options.UseNpgsql(connectionString)); + services.Configure(options => configuration.GetSection(DatabaseConfigurationSection).Bind(options)); + services.AddDbContext((serviceProvider, options) => + { + var databaseOptions = serviceProvider.GetRequiredService>(); + options.UseNpgsql(databaseOptions.Value.ConnectionString); + }); services.AddRepositories(); return services; diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseOptions.cs b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseOptions.cs new file mode 100644 index 00000000..ac02e05f --- /dev/null +++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseOptions.cs @@ -0,0 +1,6 @@ +namespace EvolutionaryArchitecture.Fitnet.Contracts.Infrastructure.Database; + +internal sealed class DatabaseOptions +{ + public string? ConnectionString { get; init; } +} \ No newline at end of file diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationTests/ContractsDatabaseConfiguration.cs b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationTests/ContractsDatabaseConfiguration.cs index 818e9a19..4da91e44 100644 --- a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationTests/ContractsDatabaseConfiguration.cs +++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationTests/ContractsDatabaseConfiguration.cs @@ -10,6 +10,6 @@ internal sealed class ContractsDatabaseConfiguration : IDatabaseConfiguration public Dictionary Get() => new() { - { "ConnectionStrings:Contracts", _connectionString } + { "Database:ConnectionString", _connectionString } }; } diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs index f7165a94..bc63f280 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs @@ -4,15 +4,20 @@ namespace EvolutionaryArchitecture.Fitnet.Offers.DataAccess.Database; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; internal static class DatabaseModule { - private const string ConnectionStringName = "Offers"; + private const string DatabaseConfigurationSection = "Database"; internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration) { - var connectionString = configuration.GetConnectionString(ConnectionStringName); - services.AddDbContext(options => options.UseNpgsql(connectionString)); + services.Configure(options => configuration.GetSection(DatabaseConfigurationSection).Bind(options)); + services.AddDbContext((serviceProvider, options) => + { + var databaseOptions = serviceProvider.GetRequiredService>(); + options.UseNpgsql(databaseOptions.Value.ConnectionString); + }); return services; } diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseOptions.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseOptions.cs new file mode 100644 index 00000000..6c4ff042 --- /dev/null +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseOptions.cs @@ -0,0 +1,6 @@ +namespace EvolutionaryArchitecture.Fitnet.Offers.DataAccess.Database; + +internal sealed class DatabaseOptions +{ + public string? ConnectionString { get; init; } +} \ No newline at end of file diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Tests/Fitnet.Offers.IntegrationTests/OffersDatabaseConfiguration.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Tests/Fitnet.Offers.IntegrationTests/OffersDatabaseConfiguration.cs index d366eced..3525f5d1 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Tests/Fitnet.Offers.IntegrationTests/OffersDatabaseConfiguration.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Tests/Fitnet.Offers.IntegrationTests/OffersDatabaseConfiguration.cs @@ -10,6 +10,6 @@ internal sealed class OffersDatabaseConfiguration : IDatabaseConfiguration public Dictionary Get() => new() { - { "ConnectionStrings:Offers", _connectionString } + { "Database:ConnectionString", _connectionString } }; } diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs index fcf9f43e..4b73c656 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs @@ -4,15 +4,20 @@ namespace EvolutionaryArchitecture.Fitnet.Passes.DataAccess.Database; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; internal static class DatabaseModule { - private const string ConnectionStringName = "Passes"; + private const string DatabaseConfigurationSection = "Database"; internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration) { - var connectionString = configuration.GetConnectionString(ConnectionStringName); - services.AddDbContext(options => options.UseNpgsql(connectionString)); + services.Configure(options => configuration.GetSection(DatabaseConfigurationSection).Bind(options)); + services.AddDbContext((serviceProvider, options) => + { + var databaseOptions = serviceProvider.GetRequiredService>(); + options.UseNpgsql(databaseOptions.Value.ConnectionString); + }); return services; } diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseOptions.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseOptions.cs new file mode 100644 index 00000000..fe8f892c --- /dev/null +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseOptions.cs @@ -0,0 +1,6 @@ +namespace EvolutionaryArchitecture.Fitnet.Passes.DataAccess.Database; + +internal sealed class DatabaseOptions +{ + public string? ConnectionString { get; init; } +} \ No newline at end of file diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Tests/Fitnet.Passes.IntegrationTests/PassesDatabaseConfiguration.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Tests/Fitnet.Passes.IntegrationTests/PassesDatabaseConfiguration.cs index 17742270..6f637948 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Tests/Fitnet.Passes.IntegrationTests/PassesDatabaseConfiguration.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Tests/Fitnet.Passes.IntegrationTests/PassesDatabaseConfiguration.cs @@ -10,6 +10,6 @@ internal sealed class PassesDatabaseConfiguration : IDatabaseConfiguration public Dictionary Get() => new() { - { "ConnectionStrings:Passes", _connectionString } + { "Database:ConnectionString", _connectionString } }; } diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseAccessModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseAccessModule.cs index 4778dc9d..e48e1074 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseAccessModule.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseAccessModule.cs @@ -1,11 +1,15 @@ namespace EvolutionaryArchitecture.Fitnet.Reports.DataAccess; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; internal static class DatabaseAccessModule { - internal static IServiceCollection AddDataAccess(this IServiceCollection services) + private const string DatabaseConfigurationSection = "Database"; + + internal static IServiceCollection AddDataAccess(this IServiceCollection services, IConfiguration configuration) { + services.Configure(options => configuration.GetSection(DatabaseConfigurationSection).Bind(options)); services.AddSingleton(); return services; diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs index 3e786ab5..98be2ce7 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs @@ -1,13 +1,20 @@ namespace EvolutionaryArchitecture.Fitnet.Reports.DataAccess; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Options; using System.Data; using Npgsql; -internal sealed class DatabaseConnectionFactory(IConfiguration configuration) : IDatabaseConnectionFactory +internal sealed class DatabaseConnectionFactory : IDatabaseConnectionFactory { + private readonly IOptions _databaseOptions; private NpgsqlConnection? _connection; + public DatabaseConnectionFactory(IOptions databaseOptions) + { + _databaseOptions = databaseOptions; + } + public IDbConnection Create() { if (_connection is { State: ConnectionState.Open }) @@ -15,8 +22,7 @@ public IDbConnection Create() return _connection; } - _connection = - new NpgsqlConnection(configuration.GetConnectionString("Reports")); + _connection = new NpgsqlConnection(_databaseOptions.Value.ConnectionString); _connection.Open(); return _connection; diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseOptions.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseOptions.cs new file mode 100644 index 00000000..5219b1a8 --- /dev/null +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseOptions.cs @@ -0,0 +1,6 @@ +namespace EvolutionaryArchitecture.Fitnet.Reports.DataAccess; + +internal sealed class DatabaseOptions +{ + public string? ConnectionString { get; init; } +} \ No newline at end of file diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/ReportsModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/ReportsModule.cs index f4379226..df24c753 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/ReportsModule.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/ReportsModule.cs @@ -27,7 +27,7 @@ public static IServiceCollection AddReports(this IServiceCollection services, IC return services; } - services.AddDataAccess(); + services.AddDataAccess(configuration); services.AddNewPassesRegistrationsPerMonthReport(); return services; diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/ReportsDatabaseConfiguration.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/ReportsDatabaseConfiguration.cs index a5d34f87..2b9aaa3d 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/ReportsDatabaseConfiguration.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/ReportsDatabaseConfiguration.cs @@ -10,7 +10,6 @@ internal sealed class ReportsDatabaseConfiguration : IDatabaseConfiguration public Dictionary Get() => new() { - { "ConnectionStrings:Passes", _connectionString }, - { "ConnectionStrings:Reports", _connectionString } + { "Database:ConnectionString", _connectionString } }; } From 8533b14de60548d005969bb246c7b013377694c0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:46:29 +0000 Subject: [PATCH 03/13] Update configuration files to use new Database options structure Co-authored-by: kamilbaczek <74410956+kamilbaczek@users.noreply.github.com> --- .../Src/Fitnet.Contracts/appsettings.Development.json | 4 ++-- .../Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json | 4 ++-- .../Fitnet/Src/Fitnet/appsettings.Development.json | 6 ++---- .../Fitnet/Src/Fitnet/appsettings.json | 6 ++---- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.Development.json b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.Development.json index 534a0365..dcc35bd9 100644 --- a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.Development.json +++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.Development.json @@ -8,8 +8,8 @@ "FeatureManagement": { "Contracts": true, }, - "ConnectionStrings": { - "Contracts": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword" + "Database": { + "ConnectionString": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword" }, "EventBus": { "Uri": "rabbitmq", diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json index 37b231db..45c1e4c2 100644 --- a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json +++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json @@ -9,8 +9,8 @@ "FeatureManagement": { "Contracts": true, }, - "ConnectionStrings": { - "Contracts": "" + "Database": { + "ConnectionString": "" }, "ExternalEventBus": { "Uri": "localhost", diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.Development.json b/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.Development.json index bdcefcd1..30ed3b57 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.Development.json +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.Development.json @@ -11,10 +11,8 @@ "Passes": true, "Reports": true }, - "ConnectionStrings": { - "Passes": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword", - "Reports": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword", - "Offers": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword" + "Database": { + "ConnectionString": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword" }, "EventBus": { "Uri": "rabbitmq", diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.json b/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.json index 89456cd1..4b1beae0 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.json +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.json @@ -17,10 +17,8 @@ "Enabled": true } }, - "ConnectionStrings": { - "Passes": "", - "Reports": "", - "Offers": "" + "Database": { + "ConnectionString": "" }, "EventBus": { "Uri": "localhost", From f5758e466fb08557ccbfee451225bfa36dd86448 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:32:43 +0000 Subject: [PATCH 04/13] Initial plan From a01ccf5b6c271f3de8d4327a4906e7ced9d7c273 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:32:43 +0000 Subject: [PATCH 05/13] Initial plan From f171d5710aed329efc54ef2088c0b06a40afe8f7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:32:43 +0000 Subject: [PATCH 06/13] Initial plan From c6ad5d344532c448cc0677f77ee971c4066b39de Mon Sep 17 00:00:00 2001 From: "Maciej \"MJ\" Jedrzejewski" Date: Sun, 28 Sep 2025 11:31:01 +0200 Subject: [PATCH 07/13] feat: update packages in chapter 1 (#218) --- .../Src/Fitnet/Fitnet.csproj | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj b/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj index 68d69e8c..97e62fae 100644 --- a/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj +++ b/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj @@ -5,16 +5,16 @@ - - - - - - - - - - + + + + + + + + + + From 26cf7a9a13f9f4236d955f4a39340aee376e7dbd Mon Sep 17 00:00:00 2001 From: "Maciej \"MJ\" Jedrzejewski" Date: Sun, 28 Sep 2025 11:37:20 +0200 Subject: [PATCH 08/13] feat: cleanup packages in chapter 2 (#219) --- .../Fitnet.Common.Infrastructure.csproj | 1 - .../Fitnet.Contracts.Infrastructure.csproj | 1 - .../Src/Directory.Packages.props | 17 ++++++++--------- .../Fitnet.Offers.DataAccess.csproj | 1 - .../Fitnet.Passes.DataAccess.csproj | 1 - .../Fitnet.Reports.IntegrationTests.csproj | 1 - 6 files changed, 8 insertions(+), 14 deletions(-) diff --git a/Chapter-2-modules-separation/Src/Common/Fitnet.Common.Infrastructure/Fitnet.Common.Infrastructure.csproj b/Chapter-2-modules-separation/Src/Common/Fitnet.Common.Infrastructure/Fitnet.Common.Infrastructure.csproj index 50290313..5b76a24f 100644 --- a/Chapter-2-modules-separation/Src/Common/Fitnet.Common.Infrastructure/Fitnet.Common.Infrastructure.csproj +++ b/Chapter-2-modules-separation/Src/Common/Fitnet.Common.Infrastructure/Fitnet.Common.Infrastructure.csproj @@ -8,7 +8,6 @@ - diff --git a/Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Infrastructure/Fitnet.Contracts.Infrastructure.csproj b/Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Infrastructure/Fitnet.Contracts.Infrastructure.csproj index a7bca2e8..3cac8ac0 100644 --- a/Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Infrastructure/Fitnet.Contracts.Infrastructure.csproj +++ b/Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Infrastructure/Fitnet.Contracts.Infrastructure.csproj @@ -10,7 +10,6 @@ - diff --git a/Chapter-2-modules-separation/Src/Directory.Packages.props b/Chapter-2-modules-separation/Src/Directory.Packages.props index 07da22c9..6f76a4a9 100644 --- a/Chapter-2-modules-separation/Src/Directory.Packages.props +++ b/Chapter-2-modules-separation/Src/Directory.Packages.props @@ -3,14 +3,14 @@ true - - + + @@ -18,24 +18,23 @@ - + - + + + + + - - - - - diff --git a/Chapter-2-modules-separation/Src/Offers/Fitnet.Offers.DataAccess/Fitnet.Offers.DataAccess.csproj b/Chapter-2-modules-separation/Src/Offers/Fitnet.Offers.DataAccess/Fitnet.Offers.DataAccess.csproj index 2aac0088..4f356b36 100644 --- a/Chapter-2-modules-separation/Src/Offers/Fitnet.Offers.DataAccess/Fitnet.Offers.DataAccess.csproj +++ b/Chapter-2-modules-separation/Src/Offers/Fitnet.Offers.DataAccess/Fitnet.Offers.DataAccess.csproj @@ -7,6 +7,5 @@ - \ No newline at end of file diff --git a/Chapter-2-modules-separation/Src/Passes/Fitnet.Passes.DataAccess/Fitnet.Passes.DataAccess.csproj b/Chapter-2-modules-separation/Src/Passes/Fitnet.Passes.DataAccess/Fitnet.Passes.DataAccess.csproj index 1e9f63c1..5f2c3f8a 100644 --- a/Chapter-2-modules-separation/Src/Passes/Fitnet.Passes.DataAccess/Fitnet.Passes.DataAccess.csproj +++ b/Chapter-2-modules-separation/Src/Passes/Fitnet.Passes.DataAccess/Fitnet.Passes.DataAccess.csproj @@ -7,6 +7,5 @@ - \ No newline at end of file diff --git a/Chapter-2-modules-separation/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/Fitnet.Reports.IntegrationTests.csproj b/Chapter-2-modules-separation/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/Fitnet.Reports.IntegrationTests.csproj index 3e18a25c..9e0fe877 100644 --- a/Chapter-2-modules-separation/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/Fitnet.Reports.IntegrationTests.csproj +++ b/Chapter-2-modules-separation/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/Fitnet.Reports.IntegrationTests.csproj @@ -7,7 +7,6 @@ - From 2020bb7c1a4bf2199da34984a077225082be5896 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:32:43 +0000 Subject: [PATCH 09/13] Initial plan From 54a405ddccc628a929a05518fce8cb79211126ed Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:32:43 +0000 Subject: [PATCH 10/13] Initial plan From 685975dc120ed61a9da43a62071c7dcc23e90bdb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:32:43 +0000 Subject: [PATCH 11/13] Initial plan From 9153643bbb829de1449d7c68655d65e87c458c1d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:32:43 +0000 Subject: [PATCH 12/13] Initial plan From 8db89a791b24dcea3886cc214ddf6a6646cda241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20B=C4=85czek?= Date: Sat, 4 Oct 2025 21:46:27 +0200 Subject: [PATCH 13/13] feat(db): apply options pattern to database connection factory --- .../Database/DatabaseModule.cs | 4 ++-- .../Database/DatabaseModule.cs | 2 +- .../DataAccess/DatabaseConnectionFactory.cs | 11 ++--------- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs index bc63f280..32ff1f2b 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs @@ -12,7 +12,7 @@ internal static class DatabaseModule internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration) { - services.Configure(options => configuration.GetSection(DatabaseConfigurationSection).Bind(options)); + services.Configure(_ => configuration.GetSection(DatabaseConfigurationSection)); services.AddDbContext((serviceProvider, options) => { var databaseOptions = serviceProvider.GetRequiredService>(); @@ -28,4 +28,4 @@ internal static IApplicationBuilder UseDatabase(this IApplicationBuilder applica return applicationBuilder; } -} \ No newline at end of file +} diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs index 4b73c656..6b209efa 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs @@ -12,7 +12,7 @@ internal static class DatabaseModule internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration) { - services.Configure(options => configuration.GetSection(DatabaseConfigurationSection).Bind(options)); + services.Configure(_ => configuration.GetSection(DatabaseConfigurationSection)); services.AddDbContext((serviceProvider, options) => { var databaseOptions = serviceProvider.GetRequiredService>(); diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs index 98be2ce7..6215cd0a 100644 --- a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs +++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs @@ -1,20 +1,13 @@ namespace EvolutionaryArchitecture.Fitnet.Reports.DataAccess; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Options; using System.Data; using Npgsql; -internal sealed class DatabaseConnectionFactory : IDatabaseConnectionFactory +internal sealed class DatabaseConnectionFactory(IOptions databaseOptions) : IDatabaseConnectionFactory { - private readonly IOptions _databaseOptions; private NpgsqlConnection? _connection; - public DatabaseConnectionFactory(IOptions databaseOptions) - { - _databaseOptions = databaseOptions; - } - public IDbConnection Create() { if (_connection is { State: ConnectionState.Open }) @@ -22,7 +15,7 @@ public IDbConnection Create() return _connection; } - _connection = new NpgsqlConnection(_databaseOptions.Value.ConnectionString); + _connection = new NpgsqlConnection(databaseOptions.Value.ConnectionString); _connection.Open(); return _connection;