tools/code/publisher/ApiRelease.cs (51 lines of code) (raw):
using Azure.Core.Pipeline;
using common;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace publisher;
public delegate ValueTask PutApiReleaseInApim(ApiReleaseName name, ApiReleaseDto dto, ApiName apiName, CancellationToken cancellationToken);
public delegate ValueTask DeleteApiReleaseFromApim(ApiReleaseName name, ApiName apiName, CancellationToken cancellationToken);
internal static class ApiReleaseModule
{
public static void ConfigurePutApiReleaseInApim(IHostApplicationBuilder builder)
{
AzureModule.ConfigureManagementServiceUri(builder);
AzureModule.ConfigureHttpPipeline(builder);
builder.Services.TryAddSingleton(GetPutApiReleaseInApim);
}
private static PutApiReleaseInApim GetPutApiReleaseInApim(IServiceProvider provider)
{
var serviceUri = provider.GetRequiredService<ManagementServiceUri>();
var pipeline = provider.GetRequiredService<HttpPipeline>();
var logger = provider.GetRequiredService<ILogger>();
return async (name, dto, apiName, cancellationToken) =>
{
logger.LogInformation("Putting API release {ApiReleaseName} in API {ApiName}...", name, apiName);
await ApiReleaseUri.From(name, apiName, serviceUri)
.PutDto(dto, pipeline, cancellationToken);
};
}
public static void ConfigureDeleteApiReleaseFromApim(IHostApplicationBuilder builder)
{
AzureModule.ConfigureManagementServiceUri(builder);
AzureModule.ConfigureHttpPipeline(builder);
builder.Services.TryAddSingleton(GetDeleteApiReleaseFromApim);
}
private static DeleteApiReleaseFromApim GetDeleteApiReleaseFromApim(IServiceProvider provider)
{
var serviceUri = provider.GetRequiredService<ManagementServiceUri>();
var pipeline = provider.GetRequiredService<HttpPipeline>();
var logger = provider.GetRequiredService<ILogger>();
return async (name, apiName, cancellationToken) =>
{
logger.LogInformation("Deleting API release {ApiReleaseName} from API {ApiName}...", name, apiName);
await ApiReleaseUri.From(name, apiName, serviceUri)
.Delete(pipeline, cancellationToken);
};
}
}