diff --git a/CHANGELOG.md b/CHANGELOG.md index a0a97ad..59ace53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [v0.1.9](https://github.com/contentstack/contentstack-management-dotnet/tree/v0.1.9) + - Feat + - Add support for apiVersion in bulk publish unpublish methods + ## [v0.1.8](https://github.com/contentstack/contentstack-management-dotnet/tree/v0.1.8) - Fix - Strong named assemblies diff --git a/Contentstack.Management.ASPNETCore/contentstack.management.aspnetcore.csproj b/Contentstack.Management.ASPNETCore/contentstack.management.aspnetcore.csproj index 0a49369..a4880ce 100644 --- a/Contentstack.Management.ASPNETCore/contentstack.management.aspnetcore.csproj +++ b/Contentstack.Management.ASPNETCore/contentstack.management.aspnetcore.csproj @@ -28,6 +28,6 @@ - + diff --git a/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj b/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj index 9d0ea6c..72384e1 100644 --- a/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj +++ b/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj @@ -4,7 +4,7 @@ net7.0 false - 0.1.3 + 0.1.9 true ../CSManagementSDK.snk diff --git a/Contentstack.Management.Core.Unit.Tests/Mokes/MockHttpHandler.cs b/Contentstack.Management.Core.Unit.Tests/Mokes/MockHttpHandler.cs index c69829d..3eda59f 100644 --- a/Contentstack.Management.Core.Unit.Tests/Mokes/MockHttpHandler.cs +++ b/Contentstack.Management.Core.Unit.Tests/Mokes/MockHttpHandler.cs @@ -9,12 +9,12 @@ namespace Contentstack.Management.Core.Unit.Tests.Mokes { public class MockRetryHadler : PipelineHandler { - public override Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false) + public override Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false, string apiVersion = null) { return base.InvokeAsync(executionContext, addAcceptMediaHeader); } - public override void InvokeSync(IExecutionContext executionContext) + public override void InvokeSync(IExecutionContext executionContext, string apiVersion = null) { base.InvokeSync(executionContext); } @@ -32,7 +32,7 @@ public MockHttpHandler(ContentstackResponse response) public ILogManager LogManager { get; set; } public IPipelineHandler InnerHandler { get; set; } - public async Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false) + public async Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false, string apiVersion = null) { executionContext.ResponseContext.httpResponse = _response; @@ -43,7 +43,7 @@ public async Task InvokeAsync(IExecutionContext executionContext, bool add return await Task.FromResult((T)executionContext.ResponseContext.httpResponse); } - public void InvokeSync(IExecutionContext executionContext) + public void InvokeSync(IExecutionContext executionContext, string apiVersion = null) { executionContext.ResponseContext.httpResponse = _response; if (executionContext.RequestContext.service != null) diff --git a/Contentstack.Management.Core.Unit.Tests/Mokes/MockService.cs b/Contentstack.Management.Core.Unit.Tests/Mokes/MockService.cs index d30158c..dfaffde 100644 --- a/Contentstack.Management.Core.Unit.Tests/Mokes/MockService.cs +++ b/Contentstack.Management.Core.Unit.Tests/Mokes/MockService.cs @@ -174,7 +174,7 @@ public bool HasRequestBody() return HttpMethod == "POST" || HttpMethod == "PUT" || HttpMethod == "PATCH"; } - public virtual IHttpRequest CreateHttpRequest(HttpClient httpClient, ContentstackClientOptions config, bool addAcceptMediaHeader = false) + public virtual IHttpRequest CreateHttpRequest(HttpClient httpClient, ContentstackClientOptions config, bool addAcceptMediaHeader = false, string apiVersion = null) { var contentstackHttpRequest = new ContentstackHttpRequest(httpClient, _serializer); contentstackHttpRequest.Method = new HttpMethod(HttpMethod); diff --git a/Contentstack.Management.Core/ContentstackClient.cs b/Contentstack.Management.Core/ContentstackClient.cs index 2cb3749..9af4734 100644 --- a/Contentstack.Management.Core/ContentstackClient.cs +++ b/Contentstack.Management.Core/ContentstackClient.cs @@ -35,7 +35,7 @@ public class ContentstackClient : IContentstackClient private HttpClient _httpClient; private bool _disposed = false; - private string Version => "0.1.8"; + private string Version => "0.1.9"; private string xUserAgent => $"contentstack-management-dotnet/{Version}"; #endregion @@ -179,7 +179,7 @@ protected void BuildPipeline() }, LogManager); } - internal ContentstackResponse InvokeSync(TRequest request) where TRequest : IContentstackService + internal ContentstackResponse InvokeSync(TRequest request, string apiVersion = null) where TRequest : IContentstackService { ThrowIfDisposed(); @@ -191,10 +191,10 @@ internal ContentstackResponse InvokeSync(TRequest request) where TRequ }, new ResponseContext()); - return (ContentstackResponse)ContentstackPipeline.InvokeSync(context).httpResponse; + return (ContentstackResponse)ContentstackPipeline.InvokeSync(context, apiVersion).httpResponse; } - internal Task InvokeAsync(TRequest request, bool addAcceptMediaHeader = false) + internal Task InvokeAsync(TRequest request, bool addAcceptMediaHeader = false, string apiVersion = null) where TRequest : IContentstackService where TResponse : ContentstackResponse { @@ -207,7 +207,7 @@ internal Task InvokeAsync(TRequest request, bool service = request }, new ResponseContext()); - return ContentstackPipeline.InvokeAsync(context, addAcceptMediaHeader); + return ContentstackPipeline.InvokeAsync(context, addAcceptMediaHeader, apiVersion); } #region Dispose methods diff --git a/Contentstack.Management.Core/Models/Asset.cs b/Contentstack.Management.Core/Models/Asset.cs index d47175d..ee0e55b 100644 --- a/Contentstack.Management.Core/Models/Asset.cs +++ b/Contentstack.Management.Core/Models/Asset.cs @@ -246,12 +246,12 @@ public virtual Task DeleteAsync() /// /// /// The . - public virtual ContentstackResponse Publish(PublishUnpublishDetails details) + public virtual ContentstackResponse Publish(PublishUnpublishDetails details, string apiVersion = null) { stack.ThrowIfNotLoggedIn(); ThrowIfUidEmpty(); - var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/publish", "asset"); + var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/publish", "asset", apiVersion); return stack.client.InvokeSync(service); } @@ -266,12 +266,12 @@ public virtual ContentstackResponse Publish(PublishUnpublishDetails details) /// /// /// The . - public virtual Task PublishAsync(PublishUnpublishDetails details) + public virtual Task PublishAsync(PublishUnpublishDetails details, string apiVersion = null) { stack.ThrowIfNotLoggedIn(); ThrowIfUidEmpty(); - var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/publish", "asset"); + var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/publish", "asset", apiVersion); return stack.client.InvokeAsync(service); } @@ -286,12 +286,12 @@ public virtual Task PublishAsync(PublishUnpublishDetails d /// /// /// The . - public virtual ContentstackResponse Unpublish(PublishUnpublishDetails details) + public virtual ContentstackResponse Unpublish(PublishUnpublishDetails details, string apiVersion = null) { stack.ThrowIfNotLoggedIn(); ThrowIfUidEmpty(); - var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/unpublish", "asset"); + var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/unpublish", "asset", apiVersion); return stack.client.InvokeSync(service); } @@ -306,12 +306,12 @@ public virtual ContentstackResponse Unpublish(PublishUnpublishDetails details) /// /// /// The . - public virtual Task UnpublishAsync(PublishUnpublishDetails details) + public virtual Task UnpublishAsync(PublishUnpublishDetails details, string apiVersion = null) { stack.ThrowIfNotLoggedIn(); ThrowIfUidEmpty(); - var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/unpublish", "asset"); + var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/unpublish", "asset", apiVersion); return stack.client.InvokeAsync(service); } diff --git a/Contentstack.Management.Core/Models/Entry.cs b/Contentstack.Management.Core/Models/Entry.cs index 79ee71b..51d8976 100644 --- a/Contentstack.Management.Core/Models/Entry.cs +++ b/Contentstack.Management.Core/Models/Entry.cs @@ -414,7 +414,7 @@ public Task ReferencesAsync(ParameterCollection collection /// Publish/Unpublish details. /// Locale for entry to be publish /// The . - public virtual ContentstackResponse Publish(PublishUnpublishDetails details, string locale = null) + public virtual ContentstackResponse Publish(PublishUnpublishDetails details, string locale = null, string apiVersion = null) { stack.ThrowIfNotLoggedIn(); ThrowIfUidEmpty(); @@ -435,13 +435,13 @@ public virtual ContentstackResponse Publish(PublishUnpublishDetails details, str /// Publish/Unpublish details. /// Locale for entry to be publish /// The Task - public virtual Task PublishAsync(PublishUnpublishDetails details, string locale = null) + public virtual Task PublishAsync(PublishUnpublishDetails details, string locale = null, string apiVersion = null) { stack.ThrowIfNotLoggedIn(); ThrowIfUidEmpty(); var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/publish", "entry", locale); - return stack.client.InvokeAsync(service); + return stack.client.InvokeAsync(service, apiVersion: apiVersion); } /// @@ -456,13 +456,13 @@ public virtual Task PublishAsync(PublishUnpublishDetails d /// Publish/Unpublish details. /// Locale for entry to be publish /// The . - public virtual ContentstackResponse Unpublish(PublishUnpublishDetails details, string locale = null) + public virtual ContentstackResponse Unpublish(PublishUnpublishDetails details, string locale = null, string apiVersion = null) { stack.ThrowIfNotLoggedIn(); ThrowIfUidEmpty(); var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/unpublish", "entry", locale); - return stack.client.InvokeSync(service); + return stack.client.InvokeSync(service, apiVersion); } /// @@ -477,13 +477,13 @@ public virtual ContentstackResponse Unpublish(PublishUnpublishDetails details, s /// Publish/Unpublish details. /// Locale for entry to be publish /// The Task - public virtual Task UnpublishAsync(PublishUnpublishDetails details, string locale = null) + public virtual Task UnpublishAsync(PublishUnpublishDetails details, string locale = null, string apiVersion = null) { stack.ThrowIfNotLoggedIn(); ThrowIfUidEmpty(); var service = new PublishUnpublishService(stack.client.serializer, stack, details, $"{resourcePath}/unpublish", "entry", locale); - return stack.client.InvokeAsync(service); + return stack.client.InvokeAsync(service, apiVersion: apiVersion); } /// diff --git a/Contentstack.Management.Core/Runtime/Pipeline/ContentstackRuntimePipeline.cs b/Contentstack.Management.Core/Runtime/Pipeline/ContentstackRuntimePipeline.cs index f8f7173..c2e270f 100644 --- a/Contentstack.Management.Core/Runtime/Pipeline/ContentstackRuntimePipeline.cs +++ b/Contentstack.Management.Core/Runtime/Pipeline/ContentstackRuntimePipeline.cs @@ -83,18 +83,18 @@ public void AddHanlder(IPipelineHandler handler) _handler = currentHanler; } - public System.Threading.Tasks.Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false) + public System.Threading.Tasks.Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false, string apiVersion = null) { ThrowIfDisposed(); - return _handler.InvokeAsync(executionContext, addAcceptMediaHeader); + return _handler.InvokeAsync(executionContext, addAcceptMediaHeader, apiVersion); } - public IResponseContext InvokeSync(IExecutionContext executionContext) + public IResponseContext InvokeSync(IExecutionContext executionContext, string apiVersion = null) { ThrowIfDisposed(); - _handler.InvokeSync(executionContext); + _handler.InvokeSync(executionContext, apiVersion); return executionContext.ResponseContext; } diff --git a/Contentstack.Management.Core/Runtime/Pipeline/HttpHandler/HttpHandler.cs b/Contentstack.Management.Core/Runtime/Pipeline/HttpHandler/HttpHandler.cs index e5f7c07..2db5949 100644 --- a/Contentstack.Management.Core/Runtime/Pipeline/HttpHandler/HttpHandler.cs +++ b/Contentstack.Management.Core/Runtime/Pipeline/HttpHandler/HttpHandler.cs @@ -23,14 +23,14 @@ internal HttpHandler(HttpClient httpClient) public ILogManager LogManager { get; set; } public IPipelineHandler InnerHandler { get; set; } - public async System.Threading.Tasks.Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false) + public async System.Threading.Tasks.Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false, string apiVersion = null) { IHttpRequest httpRequest = null; try { var requestContext = executionContext.RequestContext; - httpRequest = requestContext.service.CreateHttpRequest(_httpClient, requestContext.config, addAcceptMediaHeader); + httpRequest = requestContext.service.CreateHttpRequest(_httpClient, requestContext.config, addAcceptMediaHeader, apiVersion); if (requestContext.service.HasRequestBody() && requestContext.service.Content != null) { @@ -57,14 +57,14 @@ public async System.Threading.Tasks.Task InvokeAsync(IExecutionContext exe } } - public void InvokeSync(IExecutionContext executionContext) + public void InvokeSync(IExecutionContext executionContext, string apiVersion = null) { IHttpRequest httpRequest = null; try { var requestContext = executionContext.RequestContext; - httpRequest = requestContext.service.CreateHttpRequest(_httpClient, requestContext.config); + httpRequest = requestContext.service.CreateHttpRequest(_httpClient, requestContext.config, apiVersion: apiVersion); if (requestContext.service.HasRequestBody() && requestContext.service.Content != null) { diff --git a/Contentstack.Management.Core/Runtime/Pipeline/IPipelineHandler.cs b/Contentstack.Management.Core/Runtime/Pipeline/IPipelineHandler.cs index c77f3e5..15466d7 100644 --- a/Contentstack.Management.Core/Runtime/Pipeline/IPipelineHandler.cs +++ b/Contentstack.Management.Core/Runtime/Pipeline/IPipelineHandler.cs @@ -25,13 +25,13 @@ public interface IPipelineHandler /// /// - void InvokeSync(IExecutionContext executionContext); + void InvokeSync(IExecutionContext executionContext, string apiVersion = null); /// /// /// /// /// - System.Threading.Tasks.Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false); + System.Threading.Tasks.Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false, string apiVersion = null); } } diff --git a/Contentstack.Management.Core/Runtime/Pipeline/PipelineHandler.cs b/Contentstack.Management.Core/Runtime/Pipeline/PipelineHandler.cs index 79aa949..9c40272 100644 --- a/Contentstack.Management.Core/Runtime/Pipeline/PipelineHandler.cs +++ b/Contentstack.Management.Core/Runtime/Pipeline/PipelineHandler.cs @@ -11,20 +11,20 @@ public class PipelineHandler : IPipelineHandler public IPipelineHandler InnerHandler { get; set; } - public virtual Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false) + public virtual Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false, string apiVersion = null) { if (InnerHandler != null) { - return InnerHandler.InvokeAsync(executionContext, addAcceptMediaHeader); + return InnerHandler.InvokeAsync(executionContext, addAcceptMediaHeader, apiVersion); } throw new InvalidOperationException("Cannot invoke InnerHandler. InnerHandler is not set."); } - public virtual void InvokeSync(IExecutionContext executionContext) + public virtual void InvokeSync(IExecutionContext executionContext, string apiVersion = null) { if (this.InnerHandler != null) { - InnerHandler.InvokeSync(executionContext); + InnerHandler.InvokeSync(executionContext, apiVersion); return; } throw new InvalidOperationException("Cannot invoke InnerHandler. InnerHandler is not set."); diff --git a/Contentstack.Management.Core/Runtime/Pipeline/RetryHandler/RetryHandler.cs b/Contentstack.Management.Core/Runtime/Pipeline/RetryHandler/RetryHandler.cs index 795a8ad..c585bf2 100644 --- a/Contentstack.Management.Core/Runtime/Pipeline/RetryHandler/RetryHandler.cs +++ b/Contentstack.Management.Core/Runtime/Pipeline/RetryHandler/RetryHandler.cs @@ -13,7 +13,7 @@ public RetryHandler(RetryPolicy retryPolicy) { this.RetryPolicy = retryPolicy; } - public override async Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false) + public override async Task InvokeAsync(IExecutionContext executionContext, bool addAcceptMediaHeader = false, string apiVersion = null) { var requestContext = executionContext.RequestContext; var responseContext = executionContext.ResponseContext; @@ -22,7 +22,7 @@ public override async Task InvokeAsync(IExecutionContext executionContext, { try { - var response = await base.InvokeAsync(executionContext, addAcceptMediaHeader); + var response = await base.InvokeAsync(executionContext, addAcceptMediaHeader, apiVersion); return response; } catch (Exception exception) @@ -46,7 +46,7 @@ public override async Task InvokeAsync(IExecutionContext executionContext, throw new ContentstackException("No response was return nor exception was thrown"); } - public override void InvokeSync(IExecutionContext executionContext) + public override void InvokeSync(IExecutionContext executionContext, string apiVersion = null) { var requestContext = executionContext.RequestContext; bool shouldRetry = false; @@ -54,7 +54,7 @@ public override void InvokeSync(IExecutionContext executionContext) { try { - base.InvokeSync(executionContext); + base.InvokeSync(executionContext, apiVersion); return; } catch (Exception exception) diff --git a/Contentstack.Management.Core/Services/ContentstackService.cs b/Contentstack.Management.Core/Services/ContentstackService.cs index d683946..bcf2a34 100644 --- a/Contentstack.Management.Core/Services/ContentstackService.cs +++ b/Contentstack.Management.Core/Services/ContentstackService.cs @@ -151,7 +151,7 @@ public bool HasRequestBody() return HttpMethod == "POST" || HttpMethod == "PUT" || HttpMethod == "PATCH" || HttpMethod == "DELETE"; } - public virtual IHttpRequest CreateHttpRequest(HttpClient httpClient, ContentstackClientOptions config, bool addAcceptMediaHeader = false) + public virtual IHttpRequest CreateHttpRequest(HttpClient httpClient, ContentstackClientOptions config, bool addAcceptMediaHeader = false, string apiVersion = null) { ThrowIfDisposed(); @@ -173,6 +173,10 @@ public virtual IHttpRequest CreateHttpRequest(HttpClient httpClient, Contentstac Headers["authtoken"] = config.Authtoken; } + if (!string.IsNullOrEmpty(apiVersion)) + { + Headers["api_version"] = apiVersion; + } var contentstackHttpRequest = new ContentstackHttpRequest(httpClient, _serializer); contentstackHttpRequest.Method = new HttpMethod(HttpMethod); contentstackHttpRequest.RequestUri = requestUri; diff --git a/Contentstack.Management.Core/Services/IContentstackService.cs b/Contentstack.Management.Core/Services/IContentstackService.cs index 5369b66..e213c1c 100644 --- a/Contentstack.Management.Core/Services/IContentstackService.cs +++ b/Contentstack.Management.Core/Services/IContentstackService.cs @@ -98,7 +98,7 @@ HttpContent Content /// string GetHeaderValue(string headerName); - IHttpRequest CreateHttpRequest(HttpClient httpClient, ContentstackClientOptions config, bool addAcceptMediaHeader = false); + IHttpRequest CreateHttpRequest(HttpClient httpClient, ContentstackClientOptions config, bool addAcceptMediaHeader = false, string apiVersion = null); void OnResponse(IResponse httpResponse, ContentstackClientOptions config); bool HasRequestBody(); } diff --git a/Contentstack.Management.Core/contentstack.management.core.csproj b/Contentstack.Management.Core/contentstack.management.core.csproj index 04413b7..94b1097 100644 --- a/Contentstack.Management.Core/contentstack.management.core.csproj +++ b/Contentstack.Management.Core/contentstack.management.core.csproj @@ -64,7 +64,7 @@ - - + + diff --git a/Directory.Build.props b/Directory.Build.props index f62be9a..b3fc491 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,5 +1,5 @@ - 0.1.8 + 0.1.9