private static PutWorkspaceApiInApim GetPutWorkspaceApiInApim()

in tools/code/publisher/WorkspaceApi.cs [514:545]


    private static PutWorkspaceApiInApim GetPutWorkspaceApiInApim(IServiceProvider provider)
    {
        var serviceUri = provider.GetRequiredService<ManagementServiceUri>();
        var pipeline = provider.GetRequiredService<HttpPipeline>();
        var logger = provider.GetRequiredService<ILogger>();

        return async (name, dto, graphQlSpecificationContentsOption, workspaceName, cancellationToken) =>
        {
            logger.LogInformation("Adding API {ApiName} to workspace {WorkspaceName}...", name, workspaceName);

            var revisionNumber = Common.GetRevisionNumber(dto);
            var uri = getRevisionedUri(name, workspaceName, revisionNumber);

            // APIM sometimes fails revisions if isCurrent is set to true.
            var dtoWithoutIsCurrent = dto with { Properties = dto.Properties with { IsCurrent = null } };

            await uri.PutDto(dtoWithoutIsCurrent, pipeline, cancellationToken);

            // Put GraphQl schema
            await graphQlSpecificationContentsOption.IterTask(async graphQlSpecificationContents =>
            {
                var (_, contents) = graphQlSpecificationContents;
                await uri.PutGraphQlSchema(contents, pipeline, cancellationToken);
            });
        };

        WorkspaceApiUri getRevisionedUri(ApiName name, WorkspaceName workspaceName, ApiRevisionNumber revisionNumber)
        {
            var revisionedApiName = ApiName.GetRevisionedName(name, revisionNumber);
            return WorkspaceApiUri.From(revisionedApiName, workspaceName, serviceUri);
        }
    }