using Events.Auth; using Events.FilesAPI.Features.Certificates.Download; using Events.FilesAPI.Features.Certificates.Synchronize; using Events.FilesAPI.Features.RegistrationsExcel.Download; using Events.FilesAPI.Features.RegistrationsExcel.Synchronize; using Events.FilesAPI.Infrastructure.Messaging; using Events.FilesAPI.Infrastructure.Options; using Events.WebAPI.Handlers.EF.Data.Postgres; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString("EventsPostgres"))); builder.Services.AddOptions() .Bind(builder.Configuration.GetSection("Paths")) .ValidateDataAnnotations() .Validate( settings => !string.IsNullOrWhiteSpace(settings.OutputPath), "GeneratedFilesOptions:OutputPath must be configured.") .ValidateOnStart(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly)); builder.Services.SetupMassTransit(builder.Configuration); builder.Services.SetupAuthenticationAndAuthorization( builder.Configuration["Auth:Authority"] ?? throw new InvalidOperationException("Missing configuration value Auth:Authority."), builder.Configuration["Auth:Audience"] ?? throw new InvalidOperationException("Missing configuration value Auth:Audience.")); var app = builder.Build(); app.UseRouting(); app.UseCors(builder => { builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .WithExposedHeaders("Token-Expired", "Content-Disposition"); }); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();