From 5185323d7be40be412d4faa5ad92024898d000c6 Mon Sep 17 00:00:00 2001 From: StevanFreeborn Date: Fri, 24 Jun 2022 12:22:40 -0500 Subject: [PATCH] cleanup. refactored program.cs to make use of static setup classes --- server/Models/CharacterFilter.cs | 8 +-- server/Program.cs | 102 ++----------------------------- server/Setup/Middleware.cs | 41 +++++++++++++ server/Setup/Services.cs | 80 ++++++++++++++++++++++++ 4 files changed, 127 insertions(+), 104 deletions(-) create mode 100644 server/Setup/Middleware.cs create mode 100644 server/Setup/Services.cs diff --git a/server/Models/CharacterFilter.cs b/server/Models/CharacterFilter.cs index 3d84338..35b0ef0 100644 --- a/server/Models/CharacterFilter.cs +++ b/server/Models/CharacterFilter.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace server.Models +namespace server.Models { public class CharacterFilter { diff --git a/server/Program.cs b/server/Program.cs index f4a4ea9..8f4acd6 100644 --- a/server/Program.cs +++ b/server/Program.cs @@ -1,14 +1,5 @@ -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.ApiExplorer; -using Microsoft.AspNetCore.Mvc.Versioning; -using Microsoft.Extensions.Options; -using server.SwaggerOptions; -using server.Persistence; -using server.Persistence.Repositories; using server.Persistence.Seed; -using System.Reflection; -using AspNetCoreRateLimit; -using server.SwaggerOptions.Filters; +using server.Setup; if (args.Length == 2 && args[0].ToLower() == "seed") { @@ -36,98 +27,15 @@ if (args.Length == 2 && args[0].ToLower() == "seed") } else { - var builder = WebApplication.CreateBuilder(args); - builder.Services.AddMemoryCache(); - - builder.Services.Configure( - builder.Configuration.GetSection("IpRateLimiting")); - - builder.Services.Configure( - builder.Configuration.GetSection("IpRateLimitPolicies")); - - builder.Services.AddInMemoryRateLimiting(); - - builder.Services.AddSingleton(); - - builder.Services.Configure( - builder.Configuration.GetSection("MongoDBSettings")); - - builder.Services.AddSingleton(sp => - sp.GetRequiredService>().Value); - - builder.Services.AddSingleton(); - - builder.Services.AddScoped(); - - builder.Services.AddScoped(); - - builder.Services.AddScoped(); - - builder.Services.AddScoped(); - - builder.Services.AddControllers(); - - builder.Services.AddEndpointsApiExplorer(); - - builder.Services.AddSwaggerGen(options => - { - var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; - var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); - - options.IncludeXmlComments(xmlPath); - options.OperationFilter(); - }); - - builder.Services.ConfigureOptions(); - - builder.Services.AddApiVersioning(config => - { - config.DefaultApiVersion = new ApiVersion(1, 0); - config.AssumeDefaultVersionWhenUnspecified = true; - config.ReportApiVersions = true; - config.ApiVersionReader = new HeaderApiVersionReader("x-api-version"); - }); - - builder.Services.AddVersionedApiExplorer(config => - { - config.GroupNameFormat = "'v'VVV"; - }); + Services.SetupDb(builder); + Services.SetupMvC(builder); + Services.SetupSwagger(builder); var app = builder.Build(); - app.UseStaticFiles(); - - app.UseSwagger(options => - { - options.RouteTemplate = "/{documentName}/docs.json"; - }); - - app.UseSwaggerUI(options => - { - var provider = app.Services.GetRequiredService(); - - foreach (var description in provider.ApiVersionDescriptions) - { - var url = $"/{description.GroupName}/docs.json"; - var name = $"criminalmindsapi v{description.ApiVersion}"; - - options.RoutePrefix = String.Empty; - options.SwaggerEndpoint(url, name); - options.EnableTryItOutByDefault(); - options.DisplayRequestDuration(); - options.DocumentTitle = "criminalmindsapi"; - } - }); - - app.UseHttpsRedirection(); - - app.UseAuthorization(); - - app.MapControllers(); - - app.UseIpRateLimiting(); + Middleware.Setup(app); app.Run(); } diff --git a/server/Setup/Middleware.cs b/server/Setup/Middleware.cs new file mode 100644 index 0000000..90cfe6f --- /dev/null +++ b/server/Setup/Middleware.cs @@ -0,0 +1,41 @@ +using AspNetCoreRateLimit; +using Microsoft.AspNetCore.Mvc.ApiExplorer; + +namespace server.Setup +{ + public static class Middleware + { + public static void Setup(WebApplication app) + { + app.UseSwagger(options => + { + options.RouteTemplate = "/{documentName}/docs.json"; + }); + + app.UseSwaggerUI(options => + { + var provider = app.Services.GetRequiredService(); + + foreach (var description in provider.ApiVersionDescriptions) + { + var url = $"/{description.GroupName}/docs.json"; + var name = $"criminalmindsapi v{description.ApiVersion}"; + + options.RoutePrefix = String.Empty; + options.SwaggerEndpoint(url, name); + options.EnableTryItOutByDefault(); + options.DisplayRequestDuration(); + options.DocumentTitle = "criminalmindsapi"; + } + }); + + app.UseHttpsRedirection(); + + app.UseAuthorization(); + + app.MapControllers(); + + app.UseIpRateLimiting(); + } + } +} diff --git a/server/Setup/Services.cs b/server/Setup/Services.cs new file mode 100644 index 0000000..cb5c1f0 --- /dev/null +++ b/server/Setup/Services.cs @@ -0,0 +1,80 @@ +using AspNetCoreRateLimit; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Versioning; +using Microsoft.Extensions.Options; +using server.Persistence; +using server.Persistence.Repositories; +using server.SwaggerOptions; +using server.SwaggerOptions.Filters; +using System.Reflection; + +namespace server.Setup +{ + public static class Services + { + public static void SetupDb(WebApplicationBuilder builder) + { + builder.Services.Configure( + builder.Configuration.GetSection("MongoDBSettings")); + + builder.Services.AddSingleton(sp => + sp.GetRequiredService>().Value); + + builder.Services.AddSingleton(); + + builder.Services.AddScoped(); + + builder.Services.AddScoped(); + + builder.Services.AddScoped(); + + builder.Services.AddScoped(); + } + + public static void SetupMvC(WebApplicationBuilder builder) + { + builder.Services.AddMemoryCache(); + + builder.Services.Configure( + builder.Configuration.GetSection("IpRateLimiting")); + + builder.Services.Configure( + builder.Configuration.GetSection("IpRateLimitPolicies")); + + builder.Services.AddInMemoryRateLimiting(); + + builder.Services.AddSingleton(); + + builder.Services.AddControllers(); + + builder.Services.AddEndpointsApiExplorer(); + + builder.Services.AddApiVersioning(config => + { + config.DefaultApiVersion = new ApiVersion(1, 0); + config.AssumeDefaultVersionWhenUnspecified = true; + config.ReportApiVersions = true; + config.ApiVersionReader = new HeaderApiVersionReader("x-api-version"); + }); + + builder.Services.AddVersionedApiExplorer(config => + { + config.GroupNameFormat = "'v'VVV"; + }); + } + + public static void SetupSwagger(WebApplicationBuilder builder) + { + builder.Services.AddSwaggerGen(options => + { + var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; + var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); + + options.IncludeXmlComments(xmlPath); + options.OperationFilter(); + }); + + builder.Services.ConfigureOptions(); + } + } +}