using GerbilManagerWebAPI.Import; using Microsoft.AspNetCore.Http.HttpResults; namespace GerbilManagerWebAPI.Endpoints { /// /// FEAT-8 stage 3 — spreadsheet import loader. Consumes tools/import/output. /// POST /import/dry-run -> report what WOULD be created/linked/quarantined (no writes) /// POST /import/execute -> load the conflict-free subset (idempotent). GATED: only run /// against Julian's DB under god-supervision after he approves the dry-run. /// public static class ImportEndpoints { public static IEndpointRouteBuilder MapImportEndpoints(this IEndpointRouteBuilder app) { var group = app.MapGroup("/import").WithTags("Import"); group.MapPost("/dry-run", async Task> ( ApplicationContext db, IConfiguration config, IWebHostEnvironment env) => { var report = await new ImportService(db, config, env).RunAsync(execute: false); return TypedResults.Ok(report); }); group.MapPost("/execute", async Task> ( ApplicationContext db, IConfiguration config, IWebHostEnvironment env) => { var report = await new ImportService(db, config, env).RunAsync(execute: true); return TypedResults.Ok(report); }); group.MapPost("/ingest-resolved", async Task> ( ApplicationContext db, IConfiguration config, IWebHostEnvironment env) => { var result = await new IngestResolvedService(db, config, env).RunAsync(); return TypedResults.Ok(result); }); return app; } } }