using DigitalData.UserManager.DependencyInjection; using EnvelopeGenerator.Application; using EnvelopeGenerator.Infrastructure; using EnvelopeGenerator.ServiceHost; using EnvelopeGenerator.ServiceHost.Extensions; using EnvelopeGenerator.ServiceHost.Middleware; using Microsoft.AspNetCore.Localization; using Microsoft.EntityFrameworkCore; using System.Globalization; var builder = WebApplication.CreateBuilder(args); #region Kestrel & Windows Service Configuration if (builder.Configuration.GetValue("UseWindowsService")) { builder.Host.UseWindowsService(); } if (builder.Configuration.GetValue("UseCustomKestrelEndpoints")) { builder.WebHost.ConfigureKestrel((context, serverOptions) => { var serverConfigSection = context.Configuration.GetSection("ServerConfig"); serverOptions.Configure(serverConfigSection); }); } #endregion var config = builder.Configuration; var connStr = config.GetConnectionString("Default") ?? throw new InvalidOperationException("Connection string 'Default' is missing in the configuration."); #region Service configuration builder.Services.AddControllers(); builder.Services.AddHostedService(); builder.Services.AddDistributedSqlServerCache(options => { options.ConnectionString = connStr; options.SchemaName = "dbo"; options.TableName = "TBDD_CACHE"; }); #pragma warning disable CS0618 builder.Services.AddFinalizeDocumentJob(config); builder.Services.AddEnvelopeGeneratorInfrastructureServices( opt => { opt.AddDbTriggerParams(config); opt.AddDbContext((provider, options) => { var logger = provider.GetRequiredService>(); options.UseSqlServer(connStr) .LogTo(log => logger.LogInformation("{log}", log), Microsoft.Extensions.Logging.LogLevel.Trace) .EnableSensitiveDataLogging() .EnableDetailedErrors(); }); }); builder.Services.AddEnvelopeGeneratorServices(config); builder.Services.AddMemoryCache(); builder.Services.AddUserManager(); #pragma warning restore CS0618 builder.Services.AddLocalization(); #endregion builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); app.UseMiddleware(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } #region Localizer var supportedCultureNames = config.GetSection("SupportedCultures").Get() ?? ["de-DE", "en-US"]; var supportedCultures = supportedCultureNames.Select(cName => new CultureInfo(cName)).ToList(); var requestLocalizationOptions = new RequestLocalizationOptions { SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; requestLocalizationOptions.RequestCultureProviders.Add(new QueryStringRequestCultureProvider()); app.UseRequestLocalization(requestLocalizationOptions); #endregion app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();