80 lines
3.1 KiB
C#
80 lines
3.1 KiB
C#
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<IResult> 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<IResult> ListBranches(GiteaService svc, CancellationToken ct) =>
|
|
Results.Ok(await svc.ListBranchesAsync(ct));
|
|
|
|
private static async Task<IResult> 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<IResult> ListPulls(
|
|
GiteaService svc, string state = "open", CancellationToken ct = default) =>
|
|
Results.Ok(await svc.ListPullRequestsAsync(state, ct));
|
|
|
|
private static async Task<IResult> 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<IResult> 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<IResult> ListTags(GiteaService svc, CancellationToken ct) =>
|
|
Results.Ok(await svc.ListTagsAsync(ct));
|
|
|
|
private static async Task<IResult> 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<IResult> ListWebhooks(GiteaService svc, CancellationToken ct) =>
|
|
Results.Ok(await svc.ListWebhooksAsync(ct));
|
|
|
|
private static async Task<IResult> 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);
|
|
}
|
|
}
|