Files
RolemasterDB/src/RolemasterDb.App/Program.cs

52 lines
2.4 KiB
C#

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<RolemasterDbContext>(options => options.UseSqlite(connectionString));
builder.Services.AddScoped<LookupService>();
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<App>()
.AddInteractiveServerRenderMode();
app.Run();