femto-backend/Femto.Api/Program.cs
2025-05-04 21:46:24 +02:00

63 lines
1.7 KiB
C#

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<string>("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();