Initial push
This commit is contained in:
72
samples/SampleWebApi/Program.cs
Normal file
72
samples/SampleWebApi/Program.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
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<SampleDbContext>(options =>
|
||||
{
|
||||
options.UseInMemoryDatabase("SampleDb");
|
||||
// SpaceTime optimizations are available via EF integration
|
||||
});
|
||||
|
||||
// Add application services
|
||||
builder.Services.AddScoped<IProductService, ProductService>();
|
||||
builder.Services.AddScoped<IOrderAnalyticsService, OrderAnalyticsService>();
|
||||
builder.Services.AddHostedService<DataGeneratorService>();
|
||||
|
||||
// Configure memory limits
|
||||
builder.Services.Configure<SampleWebApi.Models.MemoryOptions>(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<SampleDbContext>();
|
||||
await DataSeeder.SeedAsync(context);
|
||||
}
|
||||
|
||||
app.Run();
|
||||
Reference in New Issue
Block a user