using Microsoft.AspNetCore.Mvc; using StellaOps.Policy.Engine.Ledger; namespace StellaOps.Policy.Engine.Endpoints; public static class LedgerExportEndpoint { public static IEndpointRouteBuilder MapLedgerExport(this IEndpointRouteBuilder routes) { routes.MapPost("/policy/ledger/export", BuildAsync) .WithName("PolicyEngine.Ledger.Export"); routes.MapGet("/policy/ledger/export/{exportId}", GetAsync) .WithName("PolicyEngine.Ledger.GetExport"); return routes; } private static async Task BuildAsync( [FromBody] LedgerExportRequest request, LedgerExportService service, CancellationToken cancellationToken) { try { var export = await service.BuildAsync(request, cancellationToken).ConfigureAwait(false); return Results.Json(export); } catch (Exception ex) when (ex is ArgumentException or KeyNotFoundException) { return Results.BadRequest(new { message = ex.Message }); } } private static async Task GetAsync( [FromRoute] string exportId, LedgerExportService service, CancellationToken cancellationToken) { var export = await service.GetAsync(exportId, cancellationToken).ConfigureAwait(false); return export is null ? Results.NotFound() : Results.Json(export); } }