using Blazorcrud.Server.Authorization; using Blazorcrud.Server.Helpers; using Blazorcrud.Server.Models; using Blazorcrud.Server.Services; using Microsoft.EntityFrameworkCore; using Microsoft.OpenApi.Models; using System.Reflection; using Microsoft.AspNetCore.Mvc; using Quartz; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); builder.Services.AddDbContext<AppDbContext>(opt => opt.UseSqlite("Filename=./BlazorServerCRUD.sqlite")); builder.Services.AddScoped<IPersonRepository, PersonRepository>(); builder.Services.AddScoped<IUploadRepository, UploadRepository>(); builder.Services.AddScoped<IUserRepository, UserRepository>(); builder.Services.AddScoped<IJwtUtils, JwtUtils>(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Blazor CRUD API", Version = "v1", Description = "CRUD API Services that act as the backend to the Blazor CRUD website." }); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme() { Name = "Authorization", Type = SecuritySchemeType.ApiKey, Scheme = "Bearer", BearerFormat = "JWT", In = ParameterLocation.Header, Description = "JWT Authorization header using the Bearer scheme." }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] {} } }); // Set the comments path for the Swagger JSON and UI. var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); c.CustomSchemaIds(r => r.FullName); }); builder.Services.AddQuartz(q => { q.UseMicrosoftDependencyInjectionJobFactory(); q.AddJobAndTrigger<UploadProcessorJob>(builder.Configuration); }); builder.Services.AddQuartzHostedService( q => q.WaitForJobsToComplete = true); builder.Services.Configure<AppSettings>(builder.Configuration.GetSection("AppSettings")); var app = builder.Build(); using (var scope = app.Services.CreateScope()) { var services = scope.ServiceProvider; try { var appDbContext = services.GetRequiredService<AppDbContext>(); DataGenerator.Initialize(appDbContext); } catch (Exception ex) { var logger = services.GetRequiredService<ILogger<Program>>(); logger.LogError(ex, "An error occurred creating the DB."); } } // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseWebAssemblyDebugging(); } 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.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "blazorcrud.api v1"); c.DefaultModelsExpandDepth(-1); c.DisplayOperationId(); }); app.UseHttpsRedirection(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.UseRouting(); app.UseMiddleware<ErrorHandlerMiddleware>(); app.UseMiddleware<JwtMiddleware>(); app.MapRazorPages(); app.MapControllers(); app.MapFallbackToFile("index.html"); app.Run();