using System.Text.Json; using System.Text.Json.Serialization; using Femto.Modules.Blog; using Femto.Modules.Media; using Quartz; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenApi(); var databaseConnectionString = builder.Configuration.GetConnectionString("Database"); if (databaseConnectionString is null) throw new Exception("no database connection string found"); var blobStorageRoot = builder.Configuration.GetValue("BlobStorageRoot"); if (blobStorageRoot is null) throw new Exception("no blob storage root found"); builder.Services.AddQuartzHostedService(options => { options.WaitForJobsToComplete = true; }); builder.Services.UseBlogModule(databaseConnectionString); builder.Services.UseMediaModule(databaseConnectionString, blobStorageRoot); builder.Services.AddControllers(); builder.Services.AddCors(options => { options.AddPolicy( "DefaultCorsPolicy", b => { b.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin(); } ); }); builder .Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString; }); var app = builder.Build(); app.UseCors("DefaultCorsPolicy"); if (app.Environment.IsDevelopment()) { app.MapOpenApi(); } app.MapControllers(); app.UseHttpsRedirection(); app.Run();