From 8162f333164bae59ca714b30fe1362da913d8c10 Mon Sep 17 00:00:00 2001
From: Pierre-Yves FARE <pyfare@gmail.com>
Date: Mon, 17 Feb 2025 15:51:28 +0000
Subject: [PATCH] Mark PostTransactionAsync as deprecated since ArangoDB 3.12

---
 .../Serialization/JsonNetApiClientSerializationTest.cs |  7 +++++--
 .../TransactionApi/TransactionApiClientTest.cs         |  6 +++++-
 .../TransactionApi/ITransactionApiClient.cs            | 10 ++++++++--
 .../TransactionApi/Models/PostTransactionBody.cs       |  4 +++-
 .../TransactionApi/TransactionApiClient.cs             |  1 +
 5 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/arangodb-net-standard.Test/Serialization/JsonNetApiClientSerializationTest.cs b/arangodb-net-standard.Test/Serialization/JsonNetApiClientSerializationTest.cs
index 2fde95a7..bb146cb1 100644
--- a/arangodb-net-standard.Test/Serialization/JsonNetApiClientSerializationTest.cs
+++ b/arangodb-net-standard.Test/Serialization/JsonNetApiClientSerializationTest.cs
@@ -2,7 +2,7 @@
 using ArangoDBNetStandard.Serialization;
 using ArangoDBNetStandard.TransactionApi.Models;
 using ArangoDBNetStandardTest.Serialization.Models;
-using Newtonsoft.Json;
+using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Text;
@@ -184,7 +184,7 @@ public void Serialize_ShouldCamelCaseBindVars_WhenSerializingPostCursorBodyWithD
             var serialization = new JsonNetApiClientSerialization();
 
             byte[] jsonBytes = serialization.Serialize(body, new ApiClientSerializationOptions(
-                useCamelCasePropertyNames: true, 
+                useCamelCasePropertyNames: true,
                 ignoreNullValues: true,
                 applySerializationOptionsToDictionaryValues: true));
 
@@ -197,6 +197,7 @@ public void Serialize_ShouldCamelCaseBindVars_WhenSerializingPostCursorBodyWithD
         }
 
         [Fact]
+        [Obsolete]
         public void Serialize_ShouldNotCamelCaseParams_WhenSerializingPostTransactionBody()
         {
             var body = new PostTransactionBody
@@ -223,6 +224,7 @@ public void Serialize_ShouldNotCamelCaseParams_WhenSerializingPostTransactionBod
 
 
         [Fact]
+        [Obsolete]
         public void Serialize_ShouldCamelCaseParams_WhenSerializingPostTransactionBodyWithDictionaryOption()
         {
             var body = new PostTransactionBody
@@ -268,6 +270,7 @@ public void Serialize_ShouldNotIgnoreNull_WhenSerializingPostCursorBody()
         }
 
         [Fact]
+        [Obsolete]
         public void Serialize_ShouldNotIgnoreNull_WhenSerializingPostTransactionBody()
         {
             var body = new PostTransactionBody
diff --git a/arangodb-net-standard.Test/TransactionApi/TransactionApiClientTest.cs b/arangodb-net-standard.Test/TransactionApi/TransactionApiClientTest.cs
index 093cbc9a..7c0d8682 100644
--- a/arangodb-net-standard.Test/TransactionApi/TransactionApiClientTest.cs
+++ b/arangodb-net-standard.Test/TransactionApi/TransactionApiClientTest.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
 using ArangoDBNetStandard;
@@ -250,6 +251,7 @@ public async Task GetTransactionStatus_ShouldThrowException_WhenTheTransctionIdI
         /// Tests that a post JS transaction succeeds.
         /// </summary>
         [Fact]
+        [Obsolete]
         public async Task PostTransaction_ShouldSucceed()
         {
             await _adb.Document.PostDocumentAsync(
@@ -295,6 +297,7 @@ await _adb.Document.PostDocumentAsync(
         /// </summary>
         /// <exception cref="ApiErrorException">With ErrorNum 10 missing/invalid action definition for transaction.</exception>
         [Fact]
+        [Obsolete]
         public async Task PostTransaction_ShouldThrow_WhenFunctionDefinitionHasSyntaxErrors()
         {
             var ex = await Assert.ThrowsAsync<ApiErrorException>(async () =>
@@ -314,6 +317,7 @@ await _adb.Transaction.PostTransactionAsync<object>(new PostTransactionBody
         /// </summary>
         /// <exception cref="ApiErrorException">With ErrorNum 10 missing/invalid collections definition for transaction.</exception>
         [Fact]
+        [Obsolete]
         public async Task PostTransaction_ShouldThrow_WhenWriteCollectionIsNotDeclared()
         {
             var ex = await Assert.ThrowsAsync<ApiErrorException>(async () =>
diff --git a/arangodb-net-standard/TransactionApi/ITransactionApiClient.cs b/arangodb-net-standard/TransactionApi/ITransactionApiClient.cs
index 7fc0bd4b..1b88462b 100644
--- a/arangodb-net-standard/TransactionApi/ITransactionApiClient.cs
+++ b/arangodb-net-standard/TransactionApi/ITransactionApiClient.cs
@@ -1,4 +1,5 @@
-using System.Threading;
+using System;
+using System.Threading;
 using System.Threading.Tasks;
 using ArangoDBNetStandard.TransactionApi.Models;
 
@@ -87,12 +88,17 @@ Task<StreamTransactionResponse> GetTransactionStatus(string transactionId,
             CancellationToken token = default);
 
         /// <summary>
-        /// POST a transaction to ArangoDB.
+        /// [DEPRECATED] POST a JavaScript Transaction to ArangoDB.
         /// </summary>
+        /// <remarks>
+        /// JavaScript Transactions are deprecated from v3.12.0 onward and will be removed in a future version.
+        /// https://docs.arangodb.com/stable/release-notes/version-3.12/incompatible-changes-in-3-12/#javascript-transactions-deprecated
+        /// </remarks>
         /// <typeparam name="T">Type to use for deserializing the object returned by the transaction function.</typeparam>
         /// <param name="body">Object containing information to submit in the POST transaction request.</param>
         /// <param name="token">A CancellationToken to observe while waiting for the task to complete or to cancel the task.</param>
         /// <returns>Response from ArangoDB after processing the request.</returns>
+        [Obsolete("JavaScript Transactions are deprecated in ArangoDB 3.12, use Stream Transactions instead.")]
         Task<PostTransactionResponse<T>> PostTransactionAsync<T>(PostTransactionBody body,
             CancellationToken token = default);
     }
diff --git a/arangodb-net-standard/TransactionApi/Models/PostTransactionBody.cs b/arangodb-net-standard/TransactionApi/Models/PostTransactionBody.cs
index a6835bd1..08b6e657 100644
--- a/arangodb-net-standard/TransactionApi/Models/PostTransactionBody.cs
+++ b/arangodb-net-standard/TransactionApi/Models/PostTransactionBody.cs
@@ -1,10 +1,12 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
 
 namespace ArangoDBNetStandard.TransactionApi.Models
 {
     /// <summary>
     /// Represents information required to make a transaction request to ArangoDB.
     /// </summary>
+    [Obsolete]
     public class PostTransactionBody
     {
         /// <summary>
diff --git a/arangodb-net-standard/TransactionApi/TransactionApiClient.cs b/arangodb-net-standard/TransactionApi/TransactionApiClient.cs
index 8f8af105..058a2f08 100644
--- a/arangodb-net-standard/TransactionApi/TransactionApiClient.cs
+++ b/arangodb-net-standard/TransactionApi/TransactionApiClient.cs
@@ -61,6 +61,7 @@ public TransactionApiClient(IApiClientTransport client, IApiClientSerialization
         /// <param name="body">Object containing information to submit in the POST transaction request.</param>
         /// <param name="token">A CancellationToken to observe while waiting for the task to complete or to cancel the task.</param>
         /// <returns>Response from ArangoDB after processing the request.</returns>
+        [Obsolete]
         public virtual async Task<PostTransactionResponse<T>> PostTransactionAsync<T>(
             PostTransactionBody body,
             CancellationToken token = default)