| 1 | using AgentForge.Abstractions; |
| 2 | using AgentForge.Contracts; |
| 3 | using AgentForge.Plugin.Sdk; |
| 4 | using AgentForge.Services; |
| 5 | using Microsoft.AspNetCore.Builder; |
| 6 | using Microsoft.AspNetCore.Http; |
| 7 | |
| 8 | namespace AgentForge.Plugin.Org.Import.GitHub; |
| 9 | |
| 10 | internal static class ForgeOrgImportGitHubEndpoints |
| 11 | { |
| 12 | internal static void Map(WebApplication app) |
| 13 | { |
| 14 | app.MapPost("/api/v1/orgs/{orgSlug}/import/github/members", ImportMembers); |
| 15 | } |
| 16 | |
| 17 | private static async Task<IResult> ImportMembers( |
| 18 | string orgSlug, |
| 19 | ImportGitHubOrgMembersRequest request, |
| 20 | ForgeOrgImporterRegistry registry, |
| 21 | HttpContext context, |
| 22 | ForgeRepoAccessService access, |
| 23 | CancellationToken cancellationToken) |
| 24 | { |
| 25 | access.EnsureHostAdmin(access.Resolve(context)); |
| 26 | if (!registry.TryGet("github", out var importer) || importer is null) |
| 27 | return Results.Json(new { detail = "Org importer not loaded for source 'github'." }, statusCode: 501); |
| 28 | |
| 29 | var mapped = new ForgeOrgImportRequest( |
| 30 | orgSlug, |
| 31 | request.ExternalOrg, |
| 32 | request.DryRun, |
| 33 | request.DefaultRole ?? "member"); |
| 34 | var response = await importer.ImportMembersAsync(mapped, cancellationToken).ConfigureAwait(false); |
| 35 | return Results.Ok(response); |
| 36 | } |
| 37 | } |
| 38 | |