using System.Text.Json; using System.Text.Json.Serialization; using Femto.Modules.Authentication.Application; using Femto.Modules.Blog.Application; using Femto.Modules.Media.Application; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenApi(); var connectionString = builder.Configuration.GetConnectionString("Database"); if (connectionString 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.InitializeBlogModule(connectionString); builder.Services.InitializeMediaModule(connectionString, blobStorageRoot); builder.Services.InitializeAuthenticationModule(connectionString); 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();