using ControlPlane.Api.Services; using ControlPlane.Core.Models; namespace ControlPlane.Api.Endpoints; public static class GiteaEndpoints { public static IEndpointRouteBuilder MapGiteaEndpoints(this IEndpointRouteBuilder app) { var g = app.MapGroup("/api/gitea").WithTags("Gitea"); g.MapGet ("/repo", GetRepo); g.MapGet ("/branches", ListBranches); g.MapPost("/branches", CreateBranch); g.MapGet ("/pulls", ListPulls); g.MapGet ("/pulls/{number:long}", GetPull); g.MapPost("/pulls", CreatePull); g.MapGet ("/tags", ListTags); g.MapPost("/tags", CreateTag); g.MapGet ("/webhooks", ListWebhooks); g.MapPost("/webhooks", RegisterWebhook); return app; } private static async Task GetRepo(GiteaService svc, CancellationToken ct) { var repo = await svc.GetRepoAsync(ct); return repo is null ? Results.StatusCode(503) : Results.Ok(repo); } private static async Task ListBranches(GiteaService svc, CancellationToken ct) => Results.Ok(await svc.ListBranchesAsync(ct)); private static async Task CreateBranch( CreateBranchRequest req, GiteaService svc, CancellationToken ct) { var branch = await svc.CreateBranchAsync(req, ct); return branch is null ? Results.BadRequest("Failed to create branch in Gitea.") : Results.Ok(branch); } private static async Task ListPulls( GiteaService svc, string state = "open", CancellationToken ct = default) => Results.Ok(await svc.ListPullRequestsAsync(state, ct)); private static async Task GetPull( long number, GiteaService svc, CancellationToken ct) { var pr = await svc.GetPullRequestAsync(number, ct); return pr is null ? Results.NotFound() : Results.Ok(pr); } private static async Task CreatePull( CreatePullRequestRequest req, GiteaService svc, CancellationToken ct) { var pr = await svc.CreatePullRequestAsync(req, ct); return pr is null ? Results.BadRequest("Failed to create PR in Gitea.") : Results.Ok(pr); } private static async Task ListTags(GiteaService svc, CancellationToken ct) => Results.Ok(await svc.ListTagsAsync(ct)); private static async Task CreateTag( CreateTagRequest req, GiteaService svc, CancellationToken ct) { var tag = await svc.CreateTagAsync(req, ct); return tag is null ? Results.BadRequest("Failed to create tag in Gitea.") : Results.Ok(tag); } private static async Task ListWebhooks(GiteaService svc, CancellationToken ct) => Results.Ok(await svc.ListWebhooksAsync(ct)); private static async Task RegisterWebhook( CreateWebhookRequest req, GiteaService svc, CancellationToken ct) { var hook = await svc.RegisterWebhookAsync(req, ct); return hook is null ? Results.BadRequest("Failed to register webhook in Gitea.") : Results.Ok(hook); } }