From e8178ee34e56310bc779b2c6bfecf8a673cf7fac Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Feb 2026 17:05:58 +0000 Subject: [PATCH 1/2] Initial plan From 336091335faffbafacb684eaf7dfd2a3f109a75e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Feb 2026 17:12:15 +0000 Subject: [PATCH 2/2] Refactor MiddlewareRegistry constructor to reduce complexity under 50 lines Co-authored-by: StuartFerguson <16325469+StuartFerguson@users.noreply.github.com> --- .../Bootstrapper/MiddlewareRegistry.cs | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/EstateReportingAPI/Bootstrapper/MiddlewareRegistry.cs b/EstateReportingAPI/Bootstrapper/MiddlewareRegistry.cs index 6e13dfb..3061de9 100644 --- a/EstateReportingAPI/Bootstrapper/MiddlewareRegistry.cs +++ b/EstateReportingAPI/Bootstrapper/MiddlewareRegistry.cs @@ -19,7 +19,19 @@ namespace EstateReportingAPI.Bootstrapper{ public class MiddlewareRegistry : ServiceRegistry{ public MiddlewareRegistry() { + this.ConfigureHealthChecks(); + this.ConfigureSwagger(); + this.ConfigureAuthentication(); + this.ConfigureControllers(); + this.ConfigureMiddlewareLogging(); + this.ConfigureHttpJsonOptions(options => + { + options.SerializerOptions.PropertyNamingPolicy = new SnakeCaseNamingPolicy(); + options.SerializerOptions.PropertyNameCaseInsensitive = true; // optional, but safer + }); + } + private void ConfigureHealthChecks(){ var connectionStringSection = Startup.Configuration.GetSection("ConnectionStrings"); if (connectionStringSection.Exists() == false) { @@ -34,7 +46,9 @@ public MiddlewareRegistry() failureStatus: HealthStatus.Degraded, tags: new[] { "db", "sql", "sqlserver" }); } + } + private void ConfigureSwagger(){ this.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo{ @@ -61,7 +75,9 @@ public MiddlewareRegistry() }); this.AddSwaggerExamplesFromAssemblyOf(); + } + private void ConfigureAuthentication(){ String? inTestMode = Environment.GetEnvironmentVariable("InTestMode"); if (String.Compare(inTestMode, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) != 0){ this.AddAuthentication(options => { @@ -79,16 +95,18 @@ public MiddlewareRegistry() options.Audience = ConfigurationReader.GetValue("SecurityConfiguration", "ApiName"); options.TokenValidationParameters = new TokenValidationParameters{ - ValidateAudience = false, - ValidAudience = - ConfigurationReader.GetValue("SecurityConfiguration", "ApiName"), - ValidIssuer = - ConfigurationReader.GetValue("SecurityConfiguration", "Authority"), - }; + ValidateAudience = false, + ValidAudience = + ConfigurationReader.GetValue("SecurityConfiguration", "ApiName"), + ValidIssuer = + ConfigurationReader.GetValue("SecurityConfiguration", "Authority"), + }; options.IncludeErrorDetails = true; }); } + } + private void ConfigureControllers(){ this.AddControllers().AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; options.SerializerSettings.TypeNameHandling = TypeNameHandling.None; @@ -99,7 +117,9 @@ public MiddlewareRegistry() Assembly assembly = this.GetType().GetTypeInfo().Assembly; this.AddMvcCore().AddApplicationPart(assembly).AddControllersAsServices(); + } + private void ConfigureMiddlewareLogging(){ bool logRequests = ConfigurationReader.GetValueOrDefault("MiddlewareLogging", "LogRequests", true); bool logResponses = ConfigurationReader.GetValueOrDefault("MiddlewareLogging", "LogResponses", true); LogLevel middlewareLogLevel = ConfigurationReader.GetValueOrDefault("MiddlewareLogging", "MiddlewareLogLevel", LogLevel.Warning); @@ -108,12 +128,6 @@ public MiddlewareRegistry() new RequestResponseMiddlewareLoggingConfig(middlewareLogLevel, logRequests, logResponses); this.AddSingleton(config); - - this.ConfigureHttpJsonOptions(options => - { - options.SerializerOptions.PropertyNamingPolicy = new SnakeCaseNamingPolicy(); - options.SerializerOptions.PropertyNameCaseInsensitive = true; // optional, but safer - }); } private HttpClientHandler ApiEndpointHttpHandler(IServiceProvider serviceProvider){