global using System.Text.Json; global using System.Text.Json.Serialization; global using Microsoft.EntityFrameworkCore; global using NetTopologySuite.IO.Converters; global using Microsoft.EntityFrameworkCore.Metadata.Builders; global using NetTopologySuite.Geometries; global using Microsoft.AspNetCore.Http.Extensions; global using Microsoft.AspNetCore.Mvc; global using NetTopologySuite; using Npgsql; using WhatApi; using WhatApi.Middleware; var builder = WebApplication.CreateBuilder(args); var dev = builder.Environment.IsDevelopment(); builder.Services.AddHttpContextAccessor(); builder.Services.AddDbContextPool(b => { var dataSourceBuilder = new NpgsqlDataSourceBuilder(builder.Configuration.GetConnectionString("Master")); dataSourceBuilder.EnableDynamicJson(); if (dev) { b.EnableSensitiveDataLogging(); dataSourceBuilder.EnableParameterLogging(); dataSourceBuilder.UseNetTopologySuite(); } b.UseNpgsql(dataSourceBuilder.Build(), o => { o.EnableRetryOnFailure(); o.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery); o.UseNetTopologySuite(); }); }); if (dev) builder.Configuration["DISABLE_AUDIT_TRAILS"] = "true"; builder.Services.AddCors(o => o.AddDefaultPolicy(p => p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader())); builder.Services.AddControllers() .AddJsonOptions(o => { o.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; o.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowNamedFloatingPointLiterals; o.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles; o.JsonSerializerOptions.Converters.Add(new GeoJsonConverterFactory()); }); var app = builder.Build(); if (dev) { using var scope = app.Services.CreateScope(); var db = scope.ServiceProvider.GetRequiredService(); Seed.Full(db, opt => { opt.ClearTables = false; }); } app.UseRouting(); app.UseForwardedHeaders(); app.UseCors(); app.MapStaticAssets(); app.UseMiddleware(); app.MapControllers(); app.Run(); return 0;