61 lines
2.5 KiB
C#
61 lines
2.5 KiB
C#
using System.Net.Http.Json;
|
|
|
|
namespace EntKube.Web.Components.Provisioning;
|
|
|
|
/// <summary>
|
|
/// BFF proxy endpoints for service provisioning. The Blazor frontend calls these
|
|
/// endpoints, and the BFF forwards requests to the Provisioning microservice.
|
|
/// </summary>
|
|
public static class ServicesProxyEndpoints
|
|
{
|
|
public static void Map(IEndpointRouteBuilder app)
|
|
{
|
|
RouteGroupBuilder group = app.MapGroup("/api/services")
|
|
.RequireAuthorization()
|
|
.DisableAntiforgery();
|
|
|
|
// GET /api/services — list all services (optionally filtered by clusterId)
|
|
group.MapGet("", async (Guid? clusterId, IHttpClientFactory httpClientFactory, CancellationToken ct) =>
|
|
{
|
|
HttpClient client = httpClientFactory.CreateClient("ProvisioningApi");
|
|
string url = clusterId.HasValue
|
|
? $"/api/services?clusterId={clusterId.Value}"
|
|
: "/api/services";
|
|
|
|
HttpResponseMessage response = await client.GetAsync(url, ct);
|
|
response.EnsureSuccessStatusCode();
|
|
return Results.Stream(await response.Content.ReadAsStreamAsync(ct), "application/json");
|
|
});
|
|
|
|
// POST /api/services — provision a new service
|
|
group.MapPost("", async (ProvisionServiceRequest request, IHttpClientFactory httpClientFactory, CancellationToken ct) =>
|
|
{
|
|
HttpClient client = httpClientFactory.CreateClient("ProvisioningApi");
|
|
HttpResponseMessage response = await client.PostAsJsonAsync("/api/services", request, ct);
|
|
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
return Results.StatusCode((int)response.StatusCode);
|
|
}
|
|
|
|
return Results.Stream(await response.Content.ReadAsStreamAsync(ct), "application/json");
|
|
});
|
|
|
|
// POST /api/services/{id}/decommission — request decommissioning
|
|
group.MapPost("{id:guid}/decommission", async (Guid id, IHttpClientFactory httpClientFactory, CancellationToken ct) =>
|
|
{
|
|
HttpClient client = httpClientFactory.CreateClient("ProvisioningApi");
|
|
HttpResponseMessage response = await client.PostAsync($"/api/services/{id}/decommission", null, ct);
|
|
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
return Results.StatusCode((int)response.StatusCode);
|
|
}
|
|
|
|
return Results.Stream(await response.Content.ReadAsStreamAsync(ct), "application/json");
|
|
});
|
|
}
|
|
}
|
|
|
|
public record ProvisionServiceRequest(Guid ClusterId, string ServiceType, string Name, string Namespace);
|