Files
predavanja/Events-WebApi/Events.FilesAPI/Program.cs
2026-05-12 17:23:45 +02:00

57 lines
1.9 KiB
C#

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<EventsContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("EventsPostgres")));
builder.Services.AddOptions<GeneratedFilesOptions>()
.Bind(builder.Configuration.GetSection("Paths"))
.ValidateDataAnnotations()
.Validate(
settings => !string.IsNullOrWhiteSpace(settings.OutputPath),
"GeneratedFilesOptions:OutputPath must be configured.")
.ValidateOnStart();
builder.Services.AddTransient<CertificateFileGenerator>();
builder.Services.AddTransient<CertificateFileLocator>();
builder.Services.AddTransient<RegistrationsExcelFileGenerator>();
builder.Services.AddTransient<RegistrationsExcelFileLocator>();
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();