too much for one commit
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
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);
|
||||
Reference in New Issue
Block a user