using Microsoft.EntityFrameworkCore; using RolemasterDb.App.Components; using RolemasterDb.App.Data; using RolemasterDb.App.Features; var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("RolemasterDb") ?? "Data Source=rolemaster.db"; builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); builder.Services.AddDbContextFactory(options => options.UseSqlite(connectionString)); builder.Services.AddScoped(); var app = builder.Build(); await RolemasterDbInitializer.InitializeAsync(app.Services); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error", createScopeForErrors: true); } app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true); app.UseAntiforgery(); app.MapStaticAssets(); var api = app.MapGroup("/api"); api.MapGet("/reference-data", async (LookupService lookupService, CancellationToken cancellationToken) => Results.Ok(await lookupService.GetReferenceDataAsync(cancellationToken))); api.MapPost("/lookup/attack", async (AttackLookupRequest request, LookupService lookupService, CancellationToken cancellationToken) => { var result = await lookupService.LookupAttackAsync(request, cancellationToken); return result is null ? Results.NotFound() : Results.Ok(result); }); api.MapPost("/lookup/critical", async (CriticalLookupRequest request, LookupService lookupService, CancellationToken cancellationToken) => { var result = await lookupService.LookupCriticalAsync(request, cancellationToken); return result is null ? Results.NotFound() : Results.Ok(result); }); api.MapGet("/tables/critical/{slug}/cells/{resultId:int}", async (string slug, int resultId, LookupService lookupService, CancellationToken cancellationToken) => { var result = await lookupService.GetCriticalCellEditorAsync(slug, resultId, cancellationToken); return result is null ? Results.NotFound() : Results.Ok(result); }); api.MapPut("/tables/critical/{slug}/cells/{resultId:int}", async (string slug, int resultId, CriticalCellUpdateRequest request, LookupService lookupService, CancellationToken cancellationToken) => { var result = await lookupService.UpdateCriticalCellAsync(slug, resultId, request, cancellationToken); return result is null ? Results.NotFound() : Results.Ok(result); }); app.MapRazorComponents() .AddInteractiveServerRenderMode(); app.Run();