using Microsoft.EntityFrameworkCore; using SqrtSpace.SpaceTime.AspNetCore; using SqrtSpace.SpaceTime.Core; using SqrtSpace.SpaceTime.EntityFramework; using SqrtSpace.SpaceTime.Linq; using SampleWebApi.Data; using SampleWebApi.Services; var builder = WebApplication.CreateBuilder(args); // Add services to the container builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new() { Title = "SqrtSpace SpaceTime Sample API", Version = "v1", Description = "Demonstrates memory-efficient data processing using √n space-time tradeoffs" }); }); // Configure SpaceTime services with memory-aware settings builder.Services.AddSpaceTime(options => { options.EnableCheckpointing = true; options.CheckpointDirectory = Path.Combine(Path.GetTempPath(), "spacetime-sample"); options.CheckpointStrategy = CheckpointStrategy.SqrtN; options.DefaultChunkSize = 1000; options.StreamingBufferSize = 64 * 1024; // 64KB options.ExternalStorageDirectory = Path.Combine(Path.GetTempPath(), "spacetime-external"); }); // Add Entity Framework with in-memory database for demo builder.Services.AddDbContext(options => { options.UseInMemoryDatabase("SampleDb"); // SpaceTime optimizations are available via EF integration }); // Add application services builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddHostedService(); // Configure memory limits builder.Services.Configure(builder.Configuration.GetSection("MemoryOptions")); var app = builder.Build(); // Configure the HTTP request pipeline if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // Enable SpaceTime middleware for automatic memory management app.UseSpaceTime(); app.MapControllers(); // Ensure database is created and seeded using (var scope = app.Services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService(); await DataSeeder.SeedAsync(context); } app.Run();