using MartinCostello.OpenApi; using Microsoft.AspNetCore.Authentication; using WorkTime.Api; using WorkTime.Api.Logic; using WorkTime.Api.Repositories; using WorkTime.Api.Services; using WorkTime.Shared.Repositories; using WorkTime.Shared.Services; var builder = WebApplication.CreateBuilder(args); // Add services to the container. // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi builder.Services.AddOpenApi(options => { options.AddDocumentTransformer(AuthHandler.ConfigureOpenApi); }); builder.Services.AddOpenApiExtensions(options => { options.AddServerUrls = true; }); builder.AddServiceDefaults(); builder.Services.AddControllers(); builder.Services.AddProblemDetails(); builder.Services.AddHttpContextAccessor(); builder.Services.AddNpgsql(builder.Configuration.GetConnectionString("data")); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddAuthentication(nameof(AuthHandler)) .AddScheme(nameof(AuthHandler), _ => { }); builder.Services.AddAuthorization(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.MapOpenApi(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/openapi/v1.json", "WorkTime.Api"); }); await using var scope = app.Services.CreateAsyncScope(); var db = scope.ServiceProvider.GetRequiredService(); db.Database.EnsureCreated(); } app.UseHttpsRedirection(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();