using System.Text.Json; using DysonNetwork.Sphere; using Microsoft.EntityFrameworkCore; using Microsoft.OpenApi.Models; using NodaTime; using NodaTime.Serialization.SystemTextJson; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddDbContext(opt => opt.UseNpgsql( builder.Configuration.GetConnectionString("App"), o => o.UseNodaTime() ).UseSnakeCaseNamingConvention() ); builder.Services.AddControllers().AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower; options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.SnakeCaseLower; options.JsonSerializerOptions.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); }); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "Solar Network API", Description = "An open-source social network", TermsOfService = new Uri("https://solsynth.dev/terms"), License = new OpenApiLicense { Name = "APGLv3", Url = new Uri("https://www.gnu.org/licenses/agpl-3.0.html") } }); }); builder.Services.AddOpenApi(); var app = builder.Build(); if (app.Environment.IsDevelopment()) app.MapOpenApi(); app.UseSwagger(); app.UseSwaggerUI(); using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService(); db.Database.Migrate(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();