diff --git a/src/Analysim.Core/Analysim.Core.csproj b/src/Analysim.Core/Analysim.Core.csproj index 71aed48..23a4efb 100644 --- a/src/Analysim.Core/Analysim.Core.csproj +++ b/src/Analysim.Core/Analysim.Core.csproj @@ -1,25 +1,25 @@  - net6.0 + net8.0 Analysim.Core Analysim.Core - - - - - - - + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/Analysim.Infrastructure/Analysim.Infrastructure.csproj b/src/Analysim.Infrastructure/Analysim.Infrastructure.csproj index 8341e1a..996cefb 100644 --- a/src/Analysim.Infrastructure/Analysim.Infrastructure.csproj +++ b/src/Analysim.Infrastructure/Analysim.Infrastructure.csproj @@ -1,19 +1,19 @@  - net6.0 + net8.0 Analysim.Infrastructure Analysim.Infrastructure - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Analysim.Web/Analysim.Web.csproj b/src/Analysim.Web/Analysim.Web.csproj index 85d9912..b06236e 100644 --- a/src/Analysim.Web/Analysim.Web.csproj +++ b/src/Analysim.Web/Analysim.Web.csproj @@ -1,7 +1,7 @@  - net6.0 + net8.0 true Latest false @@ -19,17 +19,17 @@ - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + @@ -78,7 +78,7 @@ - + @@ -95,7 +95,7 @@ - + diff --git a/src/Analysim.Web/Program.cs b/src/Analysim.Web/Program.cs index 9e84560..5b41e7d 100644 --- a/src/Analysim.Web/Program.cs +++ b/src/Analysim.Web/Program.cs @@ -1,25 +1,132 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using Core.Interfaces; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.HttpOverrides; +using Microsoft.AspNetCore.SpaServices.AngularCli; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Web.Extensions; -namespace Web -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } +var builder = WebApplication.CreateBuilder(args); - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => +builder.Services.ConfigureCors(); + +builder.Services.ConfigureAuthorization(); + +builder.Services.AddSwaggerGen(c => +{ + c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo + { + Title = "AnalySim API", + Version = "v1" + }); + + c.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme + { + Name = "Authorization", + Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey, + Scheme = "Bearer", + BearerFormat = "JWT", + In = Microsoft.OpenApi.Models.ParameterLocation.Header, + Description = "Enter 'Bearer' followed by your JWT token (e.g. 'Bearer eyJhbGci...')" + }); + + c.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement { - webBuilder.UseStartup(); - }); - } -} + { + new Microsoft.OpenApi.Models.OpenApiSecurityScheme + { + Reference = new Microsoft.OpenApi.Models.OpenApiReference + { + Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme, + Id = "Bearer" + } + }, + new string[] {} + } + }); +}); + + +builder.Services.ConfigureIdentity(); + +builder.Services.ConfigureDatabase(builder.Configuration); + +builder.Services.ConfigureJWT(builder.Configuration); + +builder.Services.ConfigureSpa(); + +builder.Services.ConfigureLoggerService(); + +builder.Services.ConfigureMailService(builder.Configuration); + +builder.Services.AddAutoMapper(typeof(Program)); + +builder.Services.AddControllers(config => +{ + config.RespectBrowserAcceptHeader = true; + config.ReturnHttpNotAcceptable = true; +}).AddNewtonsoftJson(options => + options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore) + .AddXmlDataContractSerializerFormatters(); + +var app = builder.Build(); + +var loggerManager = app.Services.GetRequiredService(); + +if (builder.Environment.IsDevelopment()) +{ + app.UseDeveloperExceptionPage(); + app.UseSwagger(); + app.UseSwaggerUI(); +} +else +{ + app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); +} + +app.ConfigureExceptionHandler(loggerManager); +app.UseHttpsRedirection(); +app.UseStaticFiles(); + +if (!builder.Environment.IsDevelopment()) +{ + app.UseSpaStaticFiles(); +} + +app.UseCors("CorsPolicy"); + +app.UseForwardedHeaders(new ForwardedHeadersOptions +{ + ForwardedHeaders = ForwardedHeaders.All +}); + +app.UseRouting(); + +app.UseAuthentication(); +app.UseAuthorization(); + + +app.MapControllerRoute( + name: "default", + pattern: "{controller}/{action=Index}/{id?}" +); + +app.UseSpa(spa => +{ + // To learn more about options for serving an Angular SPA from ASP.NET Core, + // see https://go.microsoft.com/fwlink/?linkid=864501 + + spa.Options.SourcePath = "ClientApp"; + + if (builder.Environment.IsDevelopment()) + { + spa.UseAngularCliServer(npmScript: "start"); + } + +}); + +app.Run(); diff --git a/src/Analysim.Web/Startup.cs b/src/Analysim.Web/Startup.cs deleted file mode 100644 index 8d00382..0000000 --- a/src/Analysim.Web/Startup.cs +++ /dev/null @@ -1,149 +0,0 @@ -using AutoMapper; -using Core.Interfaces; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.HttpOverrides; -using Microsoft.AspNetCore.SpaServices.AngularCli; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Web.Extensions; - -namespace Web -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - - services.ConfigureCors(); - - services.ConfigureAuthorization(); - - services.AddSwaggerGen(c => - { - c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo - { - Title = "AnalySim API", - Version = "v1" - }); - - c.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme - { - Name = "Authorization", - Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey, - Scheme = "Bearer", - BearerFormat = "JWT", - In = Microsoft.OpenApi.Models.ParameterLocation.Header, - Description = "Enter 'Bearer' followed by your JWT token (e.g. 'Bearer eyJhbGci...')" - }); - - c.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement - { - { - new Microsoft.OpenApi.Models.OpenApiSecurityScheme - { - Reference = new Microsoft.OpenApi.Models.OpenApiReference - { - Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme, - Id = "Bearer" - } - }, - new string[] {} - } - }); - }); - - - services.ConfigureIdentity(); - - services.ConfigureDatabase(Configuration); - - services.ConfigureJWT(Configuration); - - services.ConfigureSpa(); - - services.ConfigureLoggerService(); - - services.ConfigureMailService(Configuration); - - services.AddAutoMapper(typeof(Startup)); - - services.AddControllers(config => - { - config.RespectBrowserAcceptHeader = true; - config.ReturnHttpNotAcceptable = true; - }).AddNewtonsoftJson(options => - options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore) - .AddXmlDataContractSerializerFormatters(); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerManager logger) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - app.UseSwagger(); - app.UseSwaggerUI(); - } - else - { - app.UseExceptionHandler("/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - app.UseHsts(); - } - - app.ConfigureExceptionHandler(logger); - app.UseHttpsRedirection(); - app.UseStaticFiles(); - - if (!env.IsDevelopment()) - { - app.UseSpaStaticFiles(); - } - - app.UseCors("CorsPolicy"); - - app.UseForwardedHeaders(new ForwardedHeadersOptions - { - ForwardedHeaders = ForwardedHeaders.All - }); - - app.UseRouting(); - - app.UseAuthentication(); - app.UseAuthorization(); - - app.UseEndpoints(endpoints => - { - endpoints.MapControllerRoute( - name: "default", - pattern: "{controller}/{action=Index}/{id?}" - ); - }); - - app.UseSpa(spa => - { - // To learn more about options for serving an Angular SPA from ASP.NET Core, - // see https://go.microsoft.com/fwlink/?linkid=864501 - - spa.Options.SourcePath = "ClientApp"; - - if (env.IsDevelopment()) - { - spa.UseAngularCliServer(npmScript: "start"); - } - - }); - } - } -}