From ca76d45686f10f700f3535b0d41175493fe21a06 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 9 Oct 2025 20:24:04 +1300 Subject: [PATCH] Add transactions --- Appwrite/Appwrite.csproj | 2 +- Appwrite/Client.cs | 4 +- Appwrite/Models/Transaction.cs | 66 +++++ Appwrite/Models/TransactionList.cs | 38 +++ Appwrite/Services/Databases.cs | 244 ++++++++++++++++-- Appwrite/Services/TablesDb.cs | 242 +++++++++++++++-- CHANGELOG.md | 4 + README.md | 6 +- docs/examples/databases/create-document.md | 3 +- docs/examples/databases/create-documents.md | 3 +- docs/examples/databases/create-operations.md | 25 ++ docs/examples/databases/create-transaction.md | 14 + .../databases/decrement-document-attribute.md | 3 +- docs/examples/databases/delete-document.md | 3 +- docs/examples/databases/delete-documents.md | 3 +- docs/examples/databases/delete-transaction.md | 14 + docs/examples/databases/get-document.md | 3 +- docs/examples/databases/get-transaction.md | 14 + .../databases/increment-document-attribute.md | 3 +- docs/examples/databases/list-documents.md | 3 +- docs/examples/databases/list-transactions.md | 14 + docs/examples/databases/update-document.md | 3 +- docs/examples/databases/update-documents.md | 3 +- docs/examples/databases/update-transaction.md | 16 ++ docs/examples/databases/upsert-document.md | 3 +- docs/examples/databases/upsert-documents.md | 3 +- docs/examples/messaging/create-push.md | 2 +- docs/examples/messaging/update-push.md | 2 +- docs/examples/tablesdb/create-operations.md | 25 ++ docs/examples/tablesdb/create-row.md | 3 +- docs/examples/tablesdb/create-rows.md | 3 +- docs/examples/tablesdb/create-transaction.md | 14 + .../examples/tablesdb/decrement-row-column.md | 3 +- docs/examples/tablesdb/delete-row.md | 3 +- docs/examples/tablesdb/delete-rows.md | 3 +- docs/examples/tablesdb/delete-transaction.md | 14 + docs/examples/tablesdb/get-row.md | 3 +- docs/examples/tablesdb/get-transaction.md | 14 + .../examples/tablesdb/increment-row-column.md | 3 +- docs/examples/tablesdb/list-rows.md | 3 +- docs/examples/tablesdb/list-transactions.md | 14 + docs/examples/tablesdb/update-row.md | 3 +- docs/examples/tablesdb/update-rows.md | 3 +- docs/examples/tablesdb/update-transaction.md | 16 ++ docs/examples/tablesdb/upsert-row.md | 3 +- docs/examples/tablesdb/upsert-rows.md | 3 +- 46 files changed, 797 insertions(+), 79 deletions(-) create mode 100644 Appwrite/Models/Transaction.cs create mode 100644 Appwrite/Models/TransactionList.cs create mode 100644 docs/examples/databases/create-operations.md create mode 100644 docs/examples/databases/create-transaction.md create mode 100644 docs/examples/databases/delete-transaction.md create mode 100644 docs/examples/databases/get-transaction.md create mode 100644 docs/examples/databases/list-transactions.md create mode 100644 docs/examples/databases/update-transaction.md create mode 100644 docs/examples/tablesdb/create-operations.md create mode 100644 docs/examples/tablesdb/create-transaction.md create mode 100644 docs/examples/tablesdb/delete-transaction.md create mode 100644 docs/examples/tablesdb/get-transaction.md create mode 100644 docs/examples/tablesdb/list-transactions.md create mode 100644 docs/examples/tablesdb/update-transaction.md diff --git a/Appwrite/Appwrite.csproj b/Appwrite/Appwrite.csproj index 21aa7572..b48ad735 100644 --- a/Appwrite/Appwrite.csproj +++ b/Appwrite/Appwrite.csproj @@ -2,7 +2,7 @@ netstandard2.0;net462 Appwrite - 0.20.0 + 0.21.0 Appwrite Team Appwrite Team diff --git a/Appwrite/Client.cs b/Appwrite/Client.cs index b2e9073f..2bc91f1a 100644 --- a/Appwrite/Client.cs +++ b/Appwrite/Client.cs @@ -69,11 +69,11 @@ public Client( _headers = new Dictionary() { { "content-type", "application/json" }, - { "user-agent" , $"AppwriteDotNetSDK/0.20.0 ({Environment.OSVersion.Platform}; {Environment.OSVersion.VersionString})"}, + { "user-agent" , $"AppwriteDotNetSDK/0.21.0 ({Environment.OSVersion.Platform}; {Environment.OSVersion.VersionString})"}, { "x-sdk-name", ".NET" }, { "x-sdk-platform", "server" }, { "x-sdk-language", "dotnet" }, - { "x-sdk-version", "0.20.0"}, + { "x-sdk-version", "0.21.0"}, { "X-Appwrite-Response-Format", "1.8.0" } }; diff --git a/Appwrite/Models/Transaction.cs b/Appwrite/Models/Transaction.cs new file mode 100644 index 00000000..fcfd6f1c --- /dev/null +++ b/Appwrite/Models/Transaction.cs @@ -0,0 +1,66 @@ + +using System; +using System.Linq; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; +using Appwrite.Enums; + +namespace Appwrite.Models +{ + public class Transaction + { + [JsonPropertyName("$id")] + public string Id { get; private set; } + + [JsonPropertyName("$createdAt")] + public string CreatedAt { get; private set; } + + [JsonPropertyName("$updatedAt")] + public string UpdatedAt { get; private set; } + + [JsonPropertyName("status")] + public string Status { get; private set; } + + [JsonPropertyName("operations")] + public long Operations { get; private set; } + + [JsonPropertyName("expiresAt")] + public string ExpiresAt { get; private set; } + + public Transaction( + string id, + string createdAt, + string updatedAt, + string status, + long operations, + string expiresAt + ) { + Id = id; + CreatedAt = createdAt; + UpdatedAt = updatedAt; + Status = status; + Operations = operations; + ExpiresAt = expiresAt; + } + + public static Transaction From(Dictionary map) => new Transaction( + id: map["$id"].ToString(), + createdAt: map["$createdAt"].ToString(), + updatedAt: map["$updatedAt"].ToString(), + status: map["status"].ToString(), + operations: Convert.ToInt64(map["operations"]), + expiresAt: map["expiresAt"].ToString() + ); + + public Dictionary ToMap() => new Dictionary() + { + { "$id", Id }, + { "$createdAt", CreatedAt }, + { "$updatedAt", UpdatedAt }, + { "status", Status }, + { "operations", Operations }, + { "expiresAt", ExpiresAt } + }; + } +} diff --git a/Appwrite/Models/TransactionList.cs b/Appwrite/Models/TransactionList.cs new file mode 100644 index 00000000..a5489164 --- /dev/null +++ b/Appwrite/Models/TransactionList.cs @@ -0,0 +1,38 @@ + +using System; +using System.Linq; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; +using Appwrite.Enums; + +namespace Appwrite.Models +{ + public class TransactionList + { + [JsonPropertyName("total")] + public long Total { get; private set; } + + [JsonPropertyName("transactions")] + public List Transactions { get; private set; } + + public TransactionList( + long total, + List transactions + ) { + Total = total; + Transactions = transactions; + } + + public static TransactionList From(Dictionary map) => new TransactionList( + total: Convert.ToInt64(map["total"]), + transactions: map["transactions"] is JsonElement jsonArray2 ? jsonArray2.Deserialize>>()!.Select(it => Transaction.From(map: it)).ToList() : ((IEnumerable>)map["transactions"]).Select(it => Transaction.From(map: it)).ToList() + ); + + public Dictionary ToMap() => new Dictionary() + { + { "total", Total }, + { "transactions", Transactions.Select(it => it.ToMap()) } + }; + } +} diff --git a/Appwrite/Services/Databases.cs b/Appwrite/Services/Databases.cs index 5df70ce8..cb2ea076 100644 --- a/Appwrite/Services/Databases.cs +++ b/Appwrite/Services/Databases.cs @@ -82,6 +82,190 @@ static Models.Database Convert(Dictionary it) => } + /// + /// List transactions across all databases. + /// + /// + public Task ListTransactions(List? queries = null) + { + var apiPath = "/databases/transactions"; + + var apiParameters = new Dictionary() + { + { "queries", queries } + }; + + var apiHeaders = new Dictionary() + { + }; + + + static Models.TransactionList Convert(Dictionary it) => + Models.TransactionList.From(map: it); + + return _client.Call( + method: "GET", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + + /// + /// Create a new transaction. + /// + /// + public Task CreateTransaction(long? ttl = null) + { + var apiPath = "/databases/transactions"; + + var apiParameters = new Dictionary() + { + { "ttl", ttl } + }; + + var apiHeaders = new Dictionary() + { + { "content-type", "application/json" } + }; + + + static Models.Transaction Convert(Dictionary it) => + Models.Transaction.From(map: it); + + return _client.Call( + method: "POST", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + + /// + /// Get a transaction by its unique ID. + /// + /// + public Task GetTransaction(string transactionId) + { + var apiPath = "/databases/transactions/{transactionId}" + .Replace("{transactionId}", transactionId); + + var apiParameters = new Dictionary() + { + }; + + var apiHeaders = new Dictionary() + { + }; + + + static Models.Transaction Convert(Dictionary it) => + Models.Transaction.From(map: it); + + return _client.Call( + method: "GET", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + + /// + /// Update a transaction, to either commit or roll back its operations. + /// + /// + public Task UpdateTransaction(string transactionId, bool? commit = null, bool? rollback = null) + { + var apiPath = "/databases/transactions/{transactionId}" + .Replace("{transactionId}", transactionId); + + var apiParameters = new Dictionary() + { + { "commit", commit }, + { "rollback", rollback } + }; + + var apiHeaders = new Dictionary() + { + { "content-type", "application/json" } + }; + + + static Models.Transaction Convert(Dictionary it) => + Models.Transaction.From(map: it); + + return _client.Call( + method: "PATCH", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + + /// + /// Delete a transaction by its unique ID. + /// + /// + public Task DeleteTransaction(string transactionId) + { + var apiPath = "/databases/transactions/{transactionId}" + .Replace("{transactionId}", transactionId); + + var apiParameters = new Dictionary() + { + }; + + var apiHeaders = new Dictionary() + { + { "content-type", "application/json" } + }; + + + + return _client.Call( + method: "DELETE", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!); + + } + + /// + /// Create multiple operations in a single transaction. + /// + /// + public Task CreateOperations(string transactionId, List? operations = null) + { + var apiPath = "/databases/transactions/{transactionId}/operations" + .Replace("{transactionId}", transactionId); + + var apiParameters = new Dictionary() + { + { "operations", operations } + }; + + var apiHeaders = new Dictionary() + { + { "content-type", "application/json" } + }; + + + static Models.Transaction Convert(Dictionary it) => + Models.Transaction.From(map: it); + + return _client.Call( + method: "POST", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + /// /// Get a database by its unique ID. This endpoint response returns a JSON /// object with the database metadata. @@ -1460,7 +1644,7 @@ static Models.AttributeRelationship Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.listRows` instead.")] - public Task ListDocuments(string databaseId, string collectionId, List? queries = null) + public Task ListDocuments(string databaseId, string collectionId, List? queries = null, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents" .Replace("{databaseId}", databaseId) @@ -1468,7 +1652,8 @@ static Models.AttributeRelationship Convert(Dictionary it) => var apiParameters = new Dictionary() { - { "queries", queries } + { "queries", queries }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1496,7 +1681,7 @@ static Models.DocumentList Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.createRow` instead.")] - public Task CreateDocument(string databaseId, string collectionId, string documentId, object data, List? permissions = null) + public Task CreateDocument(string databaseId, string collectionId, string documentId, object data, List? permissions = null, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents" .Replace("{databaseId}", databaseId) @@ -1506,7 +1691,8 @@ static Models.DocumentList Convert(Dictionary it) => { { "documentId", documentId }, { "data", data }, - { "permissions", permissions } + { "permissions", permissions }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1535,7 +1721,7 @@ static Models.Document Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.createRows` instead.")] - public Task CreateDocuments(string databaseId, string collectionId, List documents) + public Task CreateDocuments(string databaseId, string collectionId, List documents, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents" .Replace("{databaseId}", databaseId) @@ -1543,7 +1729,8 @@ static Models.Document Convert(Dictionary it) => var apiParameters = new Dictionary() { - { "documents", documents } + { "documents", documents }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1573,7 +1760,7 @@ static Models.DocumentList Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.upsertRows` instead.")] - public Task UpsertDocuments(string databaseId, string collectionId, List documents) + public Task UpsertDocuments(string databaseId, string collectionId, List documents, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents" .Replace("{databaseId}", databaseId) @@ -1581,7 +1768,8 @@ static Models.DocumentList Convert(Dictionary it) => var apiParameters = new Dictionary() { - { "documents", documents } + { "documents", documents }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1609,7 +1797,7 @@ static Models.DocumentList Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.updateRows` instead.")] - public Task UpdateDocuments(string databaseId, string collectionId, object? data = null, List? queries = null) + public Task UpdateDocuments(string databaseId, string collectionId, object? data = null, List? queries = null, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents" .Replace("{databaseId}", databaseId) @@ -1618,7 +1806,8 @@ static Models.DocumentList Convert(Dictionary it) => var apiParameters = new Dictionary() { { "data", data }, - { "queries", queries } + { "queries", queries }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1645,7 +1834,7 @@ static Models.DocumentList Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.deleteRows` instead.")] - public Task DeleteDocuments(string databaseId, string collectionId, List? queries = null) + public Task DeleteDocuments(string databaseId, string collectionId, List? queries = null, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents" .Replace("{databaseId}", databaseId) @@ -1653,7 +1842,8 @@ static Models.DocumentList Convert(Dictionary it) => var apiParameters = new Dictionary() { - { "queries", queries } + { "queries", queries }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1680,7 +1870,7 @@ static Models.DocumentList Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.getRow` instead.")] - public Task GetDocument(string databaseId, string collectionId, string documentId, List? queries = null) + public Task GetDocument(string databaseId, string collectionId, string documentId, List? queries = null, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents/{documentId}" .Replace("{databaseId}", databaseId) @@ -1689,7 +1879,8 @@ static Models.DocumentList Convert(Dictionary it) => var apiParameters = new Dictionary() { - { "queries", queries } + { "queries", queries }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1717,7 +1908,7 @@ static Models.Document Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.upsertRow` instead.")] - public Task UpsertDocument(string databaseId, string collectionId, string documentId, object data, List? permissions = null) + public Task UpsertDocument(string databaseId, string collectionId, string documentId, object data, List? permissions = null, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents/{documentId}" .Replace("{databaseId}", databaseId) @@ -1727,7 +1918,8 @@ static Models.Document Convert(Dictionary it) => var apiParameters = new Dictionary() { { "data", data }, - { "permissions", permissions } + { "permissions", permissions }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1754,7 +1946,7 @@ static Models.Document Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.updateRow` instead.")] - public Task UpdateDocument(string databaseId, string collectionId, string documentId, object? data = null, List? permissions = null) + public Task UpdateDocument(string databaseId, string collectionId, string documentId, object? data = null, List? permissions = null, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents/{documentId}" .Replace("{databaseId}", databaseId) @@ -1764,7 +1956,8 @@ static Models.Document Convert(Dictionary it) => var apiParameters = new Dictionary() { { "data", data }, - { "permissions", permissions } + { "permissions", permissions }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1790,7 +1983,7 @@ static Models.Document Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.deleteRow` instead.")] - public Task DeleteDocument(string databaseId, string collectionId, string documentId) + public Task DeleteDocument(string databaseId, string collectionId, string documentId, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents/{documentId}" .Replace("{databaseId}", databaseId) @@ -1799,6 +1992,7 @@ public Task DeleteDocument(string databaseId, string collectionId, strin var apiParameters = new Dictionary() { + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1821,7 +2015,7 @@ public Task DeleteDocument(string databaseId, string collectionId, strin /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.decrementRowColumn` instead.")] - public Task DecrementDocumentAttribute(string databaseId, string collectionId, string documentId, string attribute, double? xvalue = null, double? min = null) + public Task DecrementDocumentAttribute(string databaseId, string collectionId, string documentId, string attribute, double? xvalue = null, double? min = null, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/decrement" .Replace("{databaseId}", databaseId) @@ -1832,7 +2026,8 @@ public Task DeleteDocument(string databaseId, string collectionId, strin var apiParameters = new Dictionary() { { "value", xvalue }, - { "min", min } + { "min", min }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1858,7 +2053,7 @@ static Models.Document Convert(Dictionary it) => /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.incrementRowColumn` instead.")] - public Task IncrementDocumentAttribute(string databaseId, string collectionId, string documentId, string attribute, double? xvalue = null, double? max = null) + public Task IncrementDocumentAttribute(string databaseId, string collectionId, string documentId, string attribute, double? xvalue = null, double? max = null, string? transactionId = null) { var apiPath = "/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/increment" .Replace("{databaseId}", databaseId) @@ -1869,7 +2064,8 @@ static Models.Document Convert(Dictionary it) => var apiParameters = new Dictionary() { { "value", xvalue }, - { "max", max } + { "max", max }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1964,7 +2160,7 @@ static Models.Index Convert(Dictionary it) => } /// - /// Get index by ID. + /// Get an index by its unique ID. /// /// [Obsolete("This API has been deprecated since 1.8.0. Please use `TablesDB.getIndex` instead.")] diff --git a/Appwrite/Services/TablesDb.cs b/Appwrite/Services/TablesDb.cs index 64e6bbce..157c3bc2 100644 --- a/Appwrite/Services/TablesDb.cs +++ b/Appwrite/Services/TablesDb.cs @@ -80,6 +80,190 @@ static Models.Database Convert(Dictionary it) => } + /// + /// List transactions across all databases. + /// + /// + public Task ListTransactions(List? queries = null) + { + var apiPath = "/tablesdb/transactions"; + + var apiParameters = new Dictionary() + { + { "queries", queries } + }; + + var apiHeaders = new Dictionary() + { + }; + + + static Models.TransactionList Convert(Dictionary it) => + Models.TransactionList.From(map: it); + + return _client.Call( + method: "GET", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + + /// + /// Create a new transaction. + /// + /// + public Task CreateTransaction(long? ttl = null) + { + var apiPath = "/tablesdb/transactions"; + + var apiParameters = new Dictionary() + { + { "ttl", ttl } + }; + + var apiHeaders = new Dictionary() + { + { "content-type", "application/json" } + }; + + + static Models.Transaction Convert(Dictionary it) => + Models.Transaction.From(map: it); + + return _client.Call( + method: "POST", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + + /// + /// Get a transaction by its unique ID. + /// + /// + public Task GetTransaction(string transactionId) + { + var apiPath = "/tablesdb/transactions/{transactionId}" + .Replace("{transactionId}", transactionId); + + var apiParameters = new Dictionary() + { + }; + + var apiHeaders = new Dictionary() + { + }; + + + static Models.Transaction Convert(Dictionary it) => + Models.Transaction.From(map: it); + + return _client.Call( + method: "GET", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + + /// + /// Update a transaction, to either commit or roll back its operations. + /// + /// + public Task UpdateTransaction(string transactionId, bool? commit = null, bool? rollback = null) + { + var apiPath = "/tablesdb/transactions/{transactionId}" + .Replace("{transactionId}", transactionId); + + var apiParameters = new Dictionary() + { + { "commit", commit }, + { "rollback", rollback } + }; + + var apiHeaders = new Dictionary() + { + { "content-type", "application/json" } + }; + + + static Models.Transaction Convert(Dictionary it) => + Models.Transaction.From(map: it); + + return _client.Call( + method: "PATCH", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + + /// + /// Delete a transaction by its unique ID. + /// + /// + public Task DeleteTransaction(string transactionId) + { + var apiPath = "/tablesdb/transactions/{transactionId}" + .Replace("{transactionId}", transactionId); + + var apiParameters = new Dictionary() + { + }; + + var apiHeaders = new Dictionary() + { + { "content-type", "application/json" } + }; + + + + return _client.Call( + method: "DELETE", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!); + + } + + /// + /// Create multiple operations in a single transaction. + /// + /// + public Task CreateOperations(string transactionId, List? operations = null) + { + var apiPath = "/tablesdb/transactions/{transactionId}/operations" + .Replace("{transactionId}", transactionId); + + var apiParameters = new Dictionary() + { + { "operations", operations } + }; + + var apiHeaders = new Dictionary() + { + { "content-type", "application/json" } + }; + + + static Models.Transaction Convert(Dictionary it) => + Models.Transaction.From(map: it); + + return _client.Call( + method: "POST", + path: apiPath, + headers: apiHeaders, + parameters: apiParameters.Where(it => it.Value != null).ToDictionary(it => it.Key, it => it.Value)!, + convert: Convert); + + } + /// /// Get a database by its unique ID. This endpoint response returns a JSON /// object with the database metadata. @@ -1552,7 +1736,7 @@ public Task DeleteIndex(string databaseId, string tableId, string key) /// params to filter your results. /// /// - public Task ListRows(string databaseId, string tableId, List? queries = null) + public Task ListRows(string databaseId, string tableId, List? queries = null, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows" .Replace("{databaseId}", databaseId) @@ -1560,7 +1744,8 @@ public Task DeleteIndex(string databaseId, string tableId, string key) var apiParameters = new Dictionary() { - { "queries", queries } + { "queries", queries }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1587,7 +1772,7 @@ static Models.RowList Convert(Dictionary it) => /// API or directly from your database console. /// /// - public Task CreateRow(string databaseId, string tableId, string rowId, object data, List? permissions = null) + public Task CreateRow(string databaseId, string tableId, string rowId, object data, List? permissions = null, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows" .Replace("{databaseId}", databaseId) @@ -1597,7 +1782,8 @@ static Models.RowList Convert(Dictionary it) => { { "rowId", rowId }, { "data", data }, - { "permissions", permissions } + { "permissions", permissions }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1625,7 +1811,7 @@ static Models.Row Convert(Dictionary it) => /// API or directly from your database console. /// /// - public Task CreateRows(string databaseId, string tableId, List rows) + public Task CreateRows(string databaseId, string tableId, List rows, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows" .Replace("{databaseId}", databaseId) @@ -1633,7 +1819,8 @@ static Models.Row Convert(Dictionary it) => var apiParameters = new Dictionary() { - { "rows", rows } + { "rows", rows }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1662,7 +1849,7 @@ static Models.RowList Convert(Dictionary it) => /// /// /// - public Task UpsertRows(string databaseId, string tableId, List rows) + public Task UpsertRows(string databaseId, string tableId, List rows, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows" .Replace("{databaseId}", databaseId) @@ -1670,7 +1857,8 @@ static Models.RowList Convert(Dictionary it) => var apiParameters = new Dictionary() { - { "rows", rows } + { "rows", rows }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1696,7 +1884,7 @@ static Models.RowList Convert(Dictionary it) => /// all rows are updated. You can pass only specific fields to be updated. /// /// - public Task UpdateRows(string databaseId, string tableId, object? data = null, List? queries = null) + public Task UpdateRows(string databaseId, string tableId, object? data = null, List? queries = null, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows" .Replace("{databaseId}", databaseId) @@ -1705,7 +1893,8 @@ static Models.RowList Convert(Dictionary it) => var apiParameters = new Dictionary() { { "data", data }, - { "queries", queries } + { "queries", queries }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1731,7 +1920,7 @@ static Models.RowList Convert(Dictionary it) => /// deleted. /// /// - public Task DeleteRows(string databaseId, string tableId, List? queries = null) + public Task DeleteRows(string databaseId, string tableId, List? queries = null, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows" .Replace("{databaseId}", databaseId) @@ -1739,7 +1928,8 @@ static Models.RowList Convert(Dictionary it) => var apiParameters = new Dictionary() { - { "queries", queries } + { "queries", queries }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1765,7 +1955,7 @@ static Models.RowList Convert(Dictionary it) => /// with the row data. /// /// - public Task GetRow(string databaseId, string tableId, string rowId, List? queries = null) + public Task GetRow(string databaseId, string tableId, string rowId, List? queries = null, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}" .Replace("{databaseId}", databaseId) @@ -1774,7 +1964,8 @@ static Models.RowList Convert(Dictionary it) => var apiParameters = new Dictionary() { - { "queries", queries } + { "queries", queries }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1801,7 +1992,7 @@ static Models.Row Convert(Dictionary it) => /// API or directly from your database console. /// /// - public Task UpsertRow(string databaseId, string tableId, string rowId, object? data = null, List? permissions = null) + public Task UpsertRow(string databaseId, string tableId, string rowId, object? data = null, List? permissions = null, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}" .Replace("{databaseId}", databaseId) @@ -1811,7 +2002,8 @@ static Models.Row Convert(Dictionary it) => var apiParameters = new Dictionary() { { "data", data }, - { "permissions", permissions } + { "permissions", permissions }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1837,7 +2029,7 @@ static Models.Row Convert(Dictionary it) => /// specific fields that will get updated. /// /// - public Task UpdateRow(string databaseId, string tableId, string rowId, object? data = null, List? permissions = null) + public Task UpdateRow(string databaseId, string tableId, string rowId, object? data = null, List? permissions = null, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}" .Replace("{databaseId}", databaseId) @@ -1847,7 +2039,8 @@ static Models.Row Convert(Dictionary it) => var apiParameters = new Dictionary() { { "data", data }, - { "permissions", permissions } + { "permissions", permissions }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1872,7 +2065,7 @@ static Models.Row Convert(Dictionary it) => /// Delete a row by its unique ID. /// /// - public Task DeleteRow(string databaseId, string tableId, string rowId) + public Task DeleteRow(string databaseId, string tableId, string rowId, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}" .Replace("{databaseId}", databaseId) @@ -1881,6 +2074,7 @@ public Task DeleteRow(string databaseId, string tableId, string rowId) var apiParameters = new Dictionary() { + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1902,7 +2096,7 @@ public Task DeleteRow(string databaseId, string tableId, string rowId) /// Decrement a specific column of a row by a given value. /// /// - public Task DecrementRowColumn(string databaseId, string tableId, string rowId, string column, double? xvalue = null, double? min = null) + public Task DecrementRowColumn(string databaseId, string tableId, string rowId, string column, double? xvalue = null, double? min = null, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/decrement" .Replace("{databaseId}", databaseId) @@ -1913,7 +2107,8 @@ public Task DeleteRow(string databaseId, string tableId, string rowId) var apiParameters = new Dictionary() { { "value", xvalue }, - { "min", min } + { "min", min }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() @@ -1938,7 +2133,7 @@ static Models.Row Convert(Dictionary it) => /// Increment a specific column of a row by a given value. /// /// - public Task IncrementRowColumn(string databaseId, string tableId, string rowId, string column, double? xvalue = null, double? max = null) + public Task IncrementRowColumn(string databaseId, string tableId, string rowId, string column, double? xvalue = null, double? max = null, string? transactionId = null) { var apiPath = "/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/increment" .Replace("{databaseId}", databaseId) @@ -1949,7 +2144,8 @@ static Models.Row Convert(Dictionary it) => var apiParameters = new Dictionary() { { "value", xvalue }, - { "max", max } + { "max", max }, + { "transactionId", transactionId } }; var apiHeaders = new Dictionary() diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bd7d1d2..d2613ed1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## 0.21.0 + +* Add transaction support for Databases and TablesDB + ## 0.20.0 * Deprecate `createVerification` method in `Account` service diff --git a/README.md b/README.md index a3821f19..a0bdf07a 100644 --- a/README.md +++ b/README.md @@ -17,17 +17,17 @@ Appwrite is an open-source backend as a service server that abstract and simplif Add this reference to your project's `.csproj` file: ```xml - + ``` You can install packages from the command line: ```powershell # Package Manager -Install-Package Appwrite -Version 0.20.0 +Install-Package Appwrite -Version 0.21.0 # or .NET CLI -dotnet add package Appwrite --version 0.20.0 +dotnet add package Appwrite --version 0.21.0 ``` diff --git a/docs/examples/databases/create-document.md b/docs/examples/databases/create-document.md index 4a7444db..9fcfdd04 100644 --- a/docs/examples/databases/create-document.md +++ b/docs/examples/databases/create-document.md @@ -20,5 +20,6 @@ Document result = await databases.CreateDocument( age = 30, isAdmin = false }, - permissions: ["read("any")"] // optional + permissions: ["read("any")"], // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/create-documents.md b/docs/examples/databases/create-documents.md index dad710f0..cc6cfb76 100644 --- a/docs/examples/databases/create-documents.md +++ b/docs/examples/databases/create-documents.md @@ -12,5 +12,6 @@ Databases databases = new Databases(client); DocumentList result = await databases.CreateDocuments( databaseId: "", collectionId: "", - documents: new List() + documents: new List(), + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/create-operations.md b/docs/examples/databases/create-operations.md new file mode 100644 index 00000000..701c6432 --- /dev/null +++ b/docs/examples/databases/create-operations.md @@ -0,0 +1,25 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +Databases databases = new Databases(client); + +Transaction result = await databases.CreateOperations( + transactionId: "", + operations: [ + { + "action": "create", + "databaseId": "", + "collectionId": "", + "documentId": "", + "data": { + "name": "Walter O'Brien" + } + } + ] // optional +); \ No newline at end of file diff --git a/docs/examples/databases/create-transaction.md b/docs/examples/databases/create-transaction.md new file mode 100644 index 00000000..f8d7b34f --- /dev/null +++ b/docs/examples/databases/create-transaction.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +Databases databases = new Databases(client); + +Transaction result = await databases.CreateTransaction( + ttl: 60 // optional +); \ No newline at end of file diff --git a/docs/examples/databases/decrement-document-attribute.md b/docs/examples/databases/decrement-document-attribute.md index 2e48d457..9ff62a08 100644 --- a/docs/examples/databases/decrement-document-attribute.md +++ b/docs/examples/databases/decrement-document-attribute.md @@ -15,5 +15,6 @@ Document result = await databases.DecrementDocumentAttribute( documentId: "", attribute: "", value: 0, // optional - min: 0 // optional + min: 0, // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/delete-document.md b/docs/examples/databases/delete-document.md index 221b80e2..34bdbdaf 100644 --- a/docs/examples/databases/delete-document.md +++ b/docs/examples/databases/delete-document.md @@ -12,5 +12,6 @@ Databases databases = new Databases(client); await databases.DeleteDocument( databaseId: "", collectionId: "", - documentId: "" + documentId: "", + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/delete-documents.md b/docs/examples/databases/delete-documents.md index a9bc9c27..52f711b8 100644 --- a/docs/examples/databases/delete-documents.md +++ b/docs/examples/databases/delete-documents.md @@ -12,5 +12,6 @@ Databases databases = new Databases(client); await databases.DeleteDocuments( databaseId: "", collectionId: "", - queries: new List() // optional + queries: new List(), // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/delete-transaction.md b/docs/examples/databases/delete-transaction.md new file mode 100644 index 00000000..713a7578 --- /dev/null +++ b/docs/examples/databases/delete-transaction.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +Databases databases = new Databases(client); + +await databases.DeleteTransaction( + transactionId: "" +); \ No newline at end of file diff --git a/docs/examples/databases/get-document.md b/docs/examples/databases/get-document.md index d7e9b688..bbafc3c8 100644 --- a/docs/examples/databases/get-document.md +++ b/docs/examples/databases/get-document.md @@ -13,5 +13,6 @@ Document result = await databases.GetDocument( databaseId: "", collectionId: "", documentId: "", - queries: new List() // optional + queries: new List(), // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/get-transaction.md b/docs/examples/databases/get-transaction.md new file mode 100644 index 00000000..d66ab6e2 --- /dev/null +++ b/docs/examples/databases/get-transaction.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +Databases databases = new Databases(client); + +Transaction result = await databases.GetTransaction( + transactionId: "" +); \ No newline at end of file diff --git a/docs/examples/databases/increment-document-attribute.md b/docs/examples/databases/increment-document-attribute.md index 923c8d63..37a4ed76 100644 --- a/docs/examples/databases/increment-document-attribute.md +++ b/docs/examples/databases/increment-document-attribute.md @@ -15,5 +15,6 @@ Document result = await databases.IncrementDocumentAttribute( documentId: "", attribute: "", value: 0, // optional - max: 0 // optional + max: 0, // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/list-documents.md b/docs/examples/databases/list-documents.md index f59e4576..643c4201 100644 --- a/docs/examples/databases/list-documents.md +++ b/docs/examples/databases/list-documents.md @@ -12,5 +12,6 @@ Databases databases = new Databases(client); DocumentList result = await databases.ListDocuments( databaseId: "", collectionId: "", - queries: new List() // optional + queries: new List(), // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/list-transactions.md b/docs/examples/databases/list-transactions.md new file mode 100644 index 00000000..3f2ce0df --- /dev/null +++ b/docs/examples/databases/list-transactions.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +Databases databases = new Databases(client); + +TransactionList result = await databases.ListTransactions( + queries: new List() // optional +); \ No newline at end of file diff --git a/docs/examples/databases/update-document.md b/docs/examples/databases/update-document.md index 3121c15e..838b2790 100644 --- a/docs/examples/databases/update-document.md +++ b/docs/examples/databases/update-document.md @@ -14,5 +14,6 @@ Document result = await databases.UpdateDocument( collectionId: "", documentId: "", data: [object], // optional - permissions: ["read("any")"] // optional + permissions: ["read("any")"], // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/update-documents.md b/docs/examples/databases/update-documents.md index 63ded21a..077ec04d 100644 --- a/docs/examples/databases/update-documents.md +++ b/docs/examples/databases/update-documents.md @@ -13,5 +13,6 @@ DocumentList result = await databases.UpdateDocuments( databaseId: "", collectionId: "", data: [object], // optional - queries: new List() // optional + queries: new List(), // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/update-transaction.md b/docs/examples/databases/update-transaction.md new file mode 100644 index 00000000..056f0d86 --- /dev/null +++ b/docs/examples/databases/update-transaction.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +Databases databases = new Databases(client); + +Transaction result = await databases.UpdateTransaction( + transactionId: "", + commit: false, // optional + rollback: false // optional +); \ No newline at end of file diff --git a/docs/examples/databases/upsert-document.md b/docs/examples/databases/upsert-document.md index c0876bfa..e12c5dd0 100644 --- a/docs/examples/databases/upsert-document.md +++ b/docs/examples/databases/upsert-document.md @@ -14,5 +14,6 @@ Document result = await databases.UpsertDocument( collectionId: "", documentId: "", data: [object], - permissions: ["read("any")"] // optional + permissions: ["read("any")"], // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/databases/upsert-documents.md b/docs/examples/databases/upsert-documents.md index 6c124c16..4fefbfcc 100644 --- a/docs/examples/databases/upsert-documents.md +++ b/docs/examples/databases/upsert-documents.md @@ -12,5 +12,6 @@ Databases databases = new Databases(client); DocumentList result = await databases.UpsertDocuments( databaseId: "", collectionId: "", - documents: new List() + documents: new List(), + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/messaging/create-push.md b/docs/examples/messaging/create-push.md index 1d2dbec1..ec90fa6d 100644 --- a/docs/examples/messaging/create-push.md +++ b/docs/examples/messaging/create-push.md @@ -19,7 +19,7 @@ Message result = await messaging.CreatePush( targets: new List(), // optional data: [object], // optional action: "", // optional - image: "[ID1:ID2]", // optional + image: "", // optional icon: "", // optional sound: "", // optional color: "", // optional diff --git a/docs/examples/messaging/update-push.md b/docs/examples/messaging/update-push.md index 37da215e..b45752c8 100644 --- a/docs/examples/messaging/update-push.md +++ b/docs/examples/messaging/update-push.md @@ -19,7 +19,7 @@ Message result = await messaging.UpdatePush( body: "", // optional data: [object], // optional action: "", // optional - image: "[ID1:ID2]", // optional + image: "", // optional icon: "", // optional sound: "", // optional color: "", // optional diff --git a/docs/examples/tablesdb/create-operations.md b/docs/examples/tablesdb/create-operations.md new file mode 100644 index 00000000..0a8da3e8 --- /dev/null +++ b/docs/examples/tablesdb/create-operations.md @@ -0,0 +1,25 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +TablesDB tablesDB = new TablesDB(client); + +Transaction result = await tablesDB.CreateOperations( + transactionId: "", + operations: [ + { + "action": "create", + "databaseId": "", + "tableId": "", + "rowId": "", + "data": { + "name": "Walter O'Brien" + } + } + ] // optional +); \ No newline at end of file diff --git a/docs/examples/tablesdb/create-row.md b/docs/examples/tablesdb/create-row.md index 01a21b0d..8d56063f 100644 --- a/docs/examples/tablesdb/create-row.md +++ b/docs/examples/tablesdb/create-row.md @@ -20,5 +20,6 @@ Row result = await tablesDB.CreateRow( age = 30, isAdmin = false }, - permissions: ["read("any")"] // optional + permissions: ["read("any")"], // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/create-rows.md b/docs/examples/tablesdb/create-rows.md index c23e795a..c73c474f 100644 --- a/docs/examples/tablesdb/create-rows.md +++ b/docs/examples/tablesdb/create-rows.md @@ -12,5 +12,6 @@ TablesDB tablesDB = new TablesDB(client); RowList result = await tablesDB.CreateRows( databaseId: "", tableId: "", - rows: new List() + rows: new List(), + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/create-transaction.md b/docs/examples/tablesdb/create-transaction.md new file mode 100644 index 00000000..b42b0875 --- /dev/null +++ b/docs/examples/tablesdb/create-transaction.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +TablesDB tablesDB = new TablesDB(client); + +Transaction result = await tablesDB.CreateTransaction( + ttl: 60 // optional +); \ No newline at end of file diff --git a/docs/examples/tablesdb/decrement-row-column.md b/docs/examples/tablesdb/decrement-row-column.md index 66d98b65..19498d03 100644 --- a/docs/examples/tablesdb/decrement-row-column.md +++ b/docs/examples/tablesdb/decrement-row-column.md @@ -15,5 +15,6 @@ Row result = await tablesDB.DecrementRowColumn( rowId: "", column: "", value: 0, // optional - min: 0 // optional + min: 0, // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/delete-row.md b/docs/examples/tablesdb/delete-row.md index 86d7fbf3..81bd084f 100644 --- a/docs/examples/tablesdb/delete-row.md +++ b/docs/examples/tablesdb/delete-row.md @@ -12,5 +12,6 @@ TablesDB tablesDB = new TablesDB(client); await tablesDB.DeleteRow( databaseId: "", tableId: "", - rowId: "" + rowId: "", + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/delete-rows.md b/docs/examples/tablesdb/delete-rows.md index 13d5758f..c0f656cd 100644 --- a/docs/examples/tablesdb/delete-rows.md +++ b/docs/examples/tablesdb/delete-rows.md @@ -12,5 +12,6 @@ TablesDB tablesDB = new TablesDB(client); await tablesDB.DeleteRows( databaseId: "", tableId: "", - queries: new List() // optional + queries: new List(), // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/delete-transaction.md b/docs/examples/tablesdb/delete-transaction.md new file mode 100644 index 00000000..6e41c80c --- /dev/null +++ b/docs/examples/tablesdb/delete-transaction.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +TablesDB tablesDB = new TablesDB(client); + +await tablesDB.DeleteTransaction( + transactionId: "" +); \ No newline at end of file diff --git a/docs/examples/tablesdb/get-row.md b/docs/examples/tablesdb/get-row.md index 99d79ac3..66f6a230 100644 --- a/docs/examples/tablesdb/get-row.md +++ b/docs/examples/tablesdb/get-row.md @@ -13,5 +13,6 @@ Row result = await tablesDB.GetRow( databaseId: "", tableId: "", rowId: "", - queries: new List() // optional + queries: new List(), // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/get-transaction.md b/docs/examples/tablesdb/get-transaction.md new file mode 100644 index 00000000..73e09049 --- /dev/null +++ b/docs/examples/tablesdb/get-transaction.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +TablesDB tablesDB = new TablesDB(client); + +Transaction result = await tablesDB.GetTransaction( + transactionId: "" +); \ No newline at end of file diff --git a/docs/examples/tablesdb/increment-row-column.md b/docs/examples/tablesdb/increment-row-column.md index 48eabc34..cbac61f1 100644 --- a/docs/examples/tablesdb/increment-row-column.md +++ b/docs/examples/tablesdb/increment-row-column.md @@ -15,5 +15,6 @@ Row result = await tablesDB.IncrementRowColumn( rowId: "", column: "", value: 0, // optional - max: 0 // optional + max: 0, // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/list-rows.md b/docs/examples/tablesdb/list-rows.md index d3f860e8..79f809d3 100644 --- a/docs/examples/tablesdb/list-rows.md +++ b/docs/examples/tablesdb/list-rows.md @@ -12,5 +12,6 @@ TablesDB tablesDB = new TablesDB(client); RowList result = await tablesDB.ListRows( databaseId: "", tableId: "", - queries: new List() // optional + queries: new List(), // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/list-transactions.md b/docs/examples/tablesdb/list-transactions.md new file mode 100644 index 00000000..b1a00e1a --- /dev/null +++ b/docs/examples/tablesdb/list-transactions.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +TablesDB tablesDB = new TablesDB(client); + +TransactionList result = await tablesDB.ListTransactions( + queries: new List() // optional +); \ No newline at end of file diff --git a/docs/examples/tablesdb/update-row.md b/docs/examples/tablesdb/update-row.md index 5eb5acdb..40f4eb43 100644 --- a/docs/examples/tablesdb/update-row.md +++ b/docs/examples/tablesdb/update-row.md @@ -14,5 +14,6 @@ Row result = await tablesDB.UpdateRow( tableId: "", rowId: "", data: [object], // optional - permissions: ["read("any")"] // optional + permissions: ["read("any")"], // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/update-rows.md b/docs/examples/tablesdb/update-rows.md index 401464d6..368977a0 100644 --- a/docs/examples/tablesdb/update-rows.md +++ b/docs/examples/tablesdb/update-rows.md @@ -13,5 +13,6 @@ RowList result = await tablesDB.UpdateRows( databaseId: "", tableId: "", data: [object], // optional - queries: new List() // optional + queries: new List(), // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/update-transaction.md b/docs/examples/tablesdb/update-transaction.md new file mode 100644 index 00000000..3b44fd5d --- /dev/null +++ b/docs/examples/tablesdb/update-transaction.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; +using Appwrite.Services; + +Client client = new Client() + .SetEndPoint("https://.cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("") // Your project ID + .SetKey(""); // Your secret API key + +TablesDB tablesDB = new TablesDB(client); + +Transaction result = await tablesDB.UpdateTransaction( + transactionId: "", + commit: false, // optional + rollback: false // optional +); \ No newline at end of file diff --git a/docs/examples/tablesdb/upsert-row.md b/docs/examples/tablesdb/upsert-row.md index e1f68a7d..18b84191 100644 --- a/docs/examples/tablesdb/upsert-row.md +++ b/docs/examples/tablesdb/upsert-row.md @@ -14,5 +14,6 @@ Row result = await tablesDB.UpsertRow( tableId: "", rowId: "", data: [object], // optional - permissions: ["read("any")"] // optional + permissions: ["read("any")"], // optional + transactionId: "" // optional ); \ No newline at end of file diff --git a/docs/examples/tablesdb/upsert-rows.md b/docs/examples/tablesdb/upsert-rows.md index 199dc2ba..fde5df71 100644 --- a/docs/examples/tablesdb/upsert-rows.md +++ b/docs/examples/tablesdb/upsert-rows.md @@ -12,5 +12,6 @@ TablesDB tablesDB = new TablesDB(client); RowList result = await tablesDB.UpsertRows( databaseId: "", tableId: "", - rows: new List() + rows: new List(), + transactionId: "" // optional ); \ No newline at end of file