From c69ba8099a5c2ad9b5e5125487cf1f381bde4135 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 9 Oct 2025 20:23:21 +1300 Subject: [PATCH] Add transactions --- CHANGELOG.md | 4 + appwrite.gemspec | 2 +- 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 +- lib/appwrite.rb | 2 + lib/appwrite/client.rb | 2 +- lib/appwrite/models/transaction.rb | 52 +++++ lib/appwrite/models/transaction_list.rb | 32 +++ lib/appwrite/services/databases.rb | 219 ++++++++++++++++-- lib/appwrite/services/tables_db.rb | 217 ++++++++++++++++- 46 files changed, 747 insertions(+), 53 deletions(-) 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 create mode 100644 lib/appwrite/models/transaction.rb create mode 100644 lib/appwrite/models/transaction_list.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 0498d7c..e39eedb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## 19.2.0 + +* Add transaction support for Databases and TablesDB + ## 19.1.0 * Deprecate `createVerification` method in `Account` service diff --git a/appwrite.gemspec b/appwrite.gemspec index f1f4dca..4bc5b8a 100644 --- a/appwrite.gemspec +++ b/appwrite.gemspec @@ -1,7 +1,7 @@ Gem::Specification.new do |spec| spec.name = 'appwrite' - spec.version = '19.1.0' + spec.version = '19.2.0' spec.license = 'BSD-3-Clause' spec.summary = 'Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API' spec.author = 'Appwrite Team' diff --git a/docs/examples/databases/create-document.md b/docs/examples/databases/create-document.md index 22ce574..d12a3db 100644 --- a/docs/examples/databases/create-document.md +++ b/docs/examples/databases/create-document.md @@ -20,5 +20,6 @@ result = databases.create_document( "age" => 30, "isAdmin" => false }, - permissions: ["read("any")"] # optional + permissions: ["read("any")"], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/databases/create-documents.md b/docs/examples/databases/create-documents.md index 16abc5e..db45bd7 100644 --- a/docs/examples/databases/create-documents.md +++ b/docs/examples/databases/create-documents.md @@ -12,5 +12,6 @@ databases = Databases.new(client) result = databases.create_documents( database_id: '', collection_id: '', - documents: [] + documents: [], + transaction_id: '' # optional ) diff --git a/docs/examples/databases/create-operations.md b/docs/examples/databases/create-operations.md new file mode 100644 index 0000000..687932b --- /dev/null +++ b/docs/examples/databases/create-operations.md @@ -0,0 +1,25 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +databases = Databases.new(client) + +result = databases.create_operations( + transaction_id: '', + operations: [ + { + "action": "create", + "databaseId": "", + "collectionId": "", + "documentId": "", + "data": { + "name": "Walter O'Brien" + } + } + ] # optional +) diff --git a/docs/examples/databases/create-transaction.md b/docs/examples/databases/create-transaction.md new file mode 100644 index 0000000..83d2e4e --- /dev/null +++ b/docs/examples/databases/create-transaction.md @@ -0,0 +1,14 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +databases = Databases.new(client) + +result = databases.create_transaction( + ttl: 60 # optional +) diff --git a/docs/examples/databases/decrement-document-attribute.md b/docs/examples/databases/decrement-document-attribute.md index 9fd0191..ecf1586 100644 --- a/docs/examples/databases/decrement-document-attribute.md +++ b/docs/examples/databases/decrement-document-attribute.md @@ -15,5 +15,6 @@ result = databases.decrement_document_attribute( document_id: '', attribute: '', value: null, # optional - min: null # optional + min: null, # optional + transaction_id: '' # optional ) diff --git a/docs/examples/databases/delete-document.md b/docs/examples/databases/delete-document.md index 2102d26..079247f 100644 --- a/docs/examples/databases/delete-document.md +++ b/docs/examples/databases/delete-document.md @@ -12,5 +12,6 @@ databases = Databases.new(client) result = databases.delete_document( database_id: '', collection_id: '', - document_id: '' + document_id: '', + transaction_id: '' # optional ) diff --git a/docs/examples/databases/delete-documents.md b/docs/examples/databases/delete-documents.md index d0f10d0..8386607 100644 --- a/docs/examples/databases/delete-documents.md +++ b/docs/examples/databases/delete-documents.md @@ -12,5 +12,6 @@ databases = Databases.new(client) result = databases.delete_documents( database_id: '', collection_id: '', - queries: [] # optional + queries: [], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/databases/delete-transaction.md b/docs/examples/databases/delete-transaction.md new file mode 100644 index 0000000..2024818 --- /dev/null +++ b/docs/examples/databases/delete-transaction.md @@ -0,0 +1,14 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +databases = Databases.new(client) + +result = databases.delete_transaction( + transaction_id: '' +) diff --git a/docs/examples/databases/get-document.md b/docs/examples/databases/get-document.md index f43a1a2..47404fe 100644 --- a/docs/examples/databases/get-document.md +++ b/docs/examples/databases/get-document.md @@ -13,5 +13,6 @@ result = databases.get_document( database_id: '', collection_id: '', document_id: '', - queries: [] # optional + queries: [], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/databases/get-transaction.md b/docs/examples/databases/get-transaction.md new file mode 100644 index 0000000..7d8349d --- /dev/null +++ b/docs/examples/databases/get-transaction.md @@ -0,0 +1,14 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +databases = Databases.new(client) + +result = databases.get_transaction( + transaction_id: '' +) diff --git a/docs/examples/databases/increment-document-attribute.md b/docs/examples/databases/increment-document-attribute.md index 3e8bfe0..8f78675 100644 --- a/docs/examples/databases/increment-document-attribute.md +++ b/docs/examples/databases/increment-document-attribute.md @@ -15,5 +15,6 @@ result = databases.increment_document_attribute( document_id: '', attribute: '', value: null, # optional - max: null # optional + max: null, # optional + transaction_id: '' # optional ) diff --git a/docs/examples/databases/list-documents.md b/docs/examples/databases/list-documents.md index 6617198..666bfbd 100644 --- a/docs/examples/databases/list-documents.md +++ b/docs/examples/databases/list-documents.md @@ -12,5 +12,6 @@ databases = Databases.new(client) result = databases.list_documents( database_id: '', collection_id: '', - queries: [] # optional + queries: [], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/databases/list-transactions.md b/docs/examples/databases/list-transactions.md new file mode 100644 index 0000000..c041a05 --- /dev/null +++ b/docs/examples/databases/list-transactions.md @@ -0,0 +1,14 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +databases = Databases.new(client) + +result = databases.list_transactions( + queries: [] # optional +) diff --git a/docs/examples/databases/update-document.md b/docs/examples/databases/update-document.md index 485eb04..5831d68 100644 --- a/docs/examples/databases/update-document.md +++ b/docs/examples/databases/update-document.md @@ -14,5 +14,6 @@ result = databases.update_document( collection_id: '', document_id: '', data: {}, # optional - permissions: ["read("any")"] # optional + permissions: ["read("any")"], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/databases/update-documents.md b/docs/examples/databases/update-documents.md index 2f69072..c85f594 100644 --- a/docs/examples/databases/update-documents.md +++ b/docs/examples/databases/update-documents.md @@ -13,5 +13,6 @@ result = databases.update_documents( database_id: '', collection_id: '', data: {}, # optional - queries: [] # optional + queries: [], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/databases/update-transaction.md b/docs/examples/databases/update-transaction.md new file mode 100644 index 0000000..e53c148 --- /dev/null +++ b/docs/examples/databases/update-transaction.md @@ -0,0 +1,16 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +databases = Databases.new(client) + +result = databases.update_transaction( + transaction_id: '', + commit: false, # optional + rollback: false # optional +) diff --git a/docs/examples/databases/upsert-document.md b/docs/examples/databases/upsert-document.md index 2380818..e5daa55 100644 --- a/docs/examples/databases/upsert-document.md +++ b/docs/examples/databases/upsert-document.md @@ -14,5 +14,6 @@ result = databases.upsert_document( collection_id: '', document_id: '', data: {}, - permissions: ["read("any")"] # optional + permissions: ["read("any")"], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/databases/upsert-documents.md b/docs/examples/databases/upsert-documents.md index 30c42aa..b470b8d 100644 --- a/docs/examples/databases/upsert-documents.md +++ b/docs/examples/databases/upsert-documents.md @@ -12,5 +12,6 @@ databases = Databases.new(client) result = databases.upsert_documents( database_id: '', collection_id: '', - documents: [] + documents: [], + transaction_id: '' # optional ) diff --git a/docs/examples/messaging/create-push.md b/docs/examples/messaging/create-push.md index 5c58fa5..f4555aa 100644 --- a/docs/examples/messaging/create-push.md +++ b/docs/examples/messaging/create-push.md @@ -18,7 +18,7 @@ result = messaging.create_push( targets: [], # optional data: {}, # 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 42a5104..19b273b 100644 --- a/docs/examples/messaging/update-push.md +++ b/docs/examples/messaging/update-push.md @@ -18,7 +18,7 @@ result = messaging.update_push( body: '', # optional data: {}, # 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 0000000..dfc7180 --- /dev/null +++ b/docs/examples/tablesdb/create-operations.md @@ -0,0 +1,25 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +tables_db = TablesDB.new(client) + +result = tables_db.create_operations( + transaction_id: '', + operations: [ + { + "action": "create", + "databaseId": "", + "tableId": "", + "rowId": "", + "data": { + "name": "Walter O'Brien" + } + } + ] # optional +) diff --git a/docs/examples/tablesdb/create-row.md b/docs/examples/tablesdb/create-row.md index 5e19136..5622711 100644 --- a/docs/examples/tablesdb/create-row.md +++ b/docs/examples/tablesdb/create-row.md @@ -20,5 +20,6 @@ result = tables_db.create_row( "age" => 30, "isAdmin" => false }, - permissions: ["read("any")"] # optional + permissions: ["read("any")"], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/create-rows.md b/docs/examples/tablesdb/create-rows.md index f258d4d..76ee286 100644 --- a/docs/examples/tablesdb/create-rows.md +++ b/docs/examples/tablesdb/create-rows.md @@ -12,5 +12,6 @@ tables_db = TablesDB.new(client) result = tables_db.create_rows( database_id: '', table_id: '', - rows: [] + rows: [], + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/create-transaction.md b/docs/examples/tablesdb/create-transaction.md new file mode 100644 index 0000000..e3525af --- /dev/null +++ b/docs/examples/tablesdb/create-transaction.md @@ -0,0 +1,14 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +tables_db = TablesDB.new(client) + +result = tables_db.create_transaction( + ttl: 60 # optional +) diff --git a/docs/examples/tablesdb/decrement-row-column.md b/docs/examples/tablesdb/decrement-row-column.md index 2143974..62b0197 100644 --- a/docs/examples/tablesdb/decrement-row-column.md +++ b/docs/examples/tablesdb/decrement-row-column.md @@ -15,5 +15,6 @@ result = tables_db.decrement_row_column( row_id: '', column: '', value: null, # optional - min: null # optional + min: null, # optional + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/delete-row.md b/docs/examples/tablesdb/delete-row.md index 704f52f..9747cb9 100644 --- a/docs/examples/tablesdb/delete-row.md +++ b/docs/examples/tablesdb/delete-row.md @@ -12,5 +12,6 @@ tables_db = TablesDB.new(client) result = tables_db.delete_row( database_id: '', table_id: '', - row_id: '' + row_id: '', + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/delete-rows.md b/docs/examples/tablesdb/delete-rows.md index 5b15c17..cf95cfb 100644 --- a/docs/examples/tablesdb/delete-rows.md +++ b/docs/examples/tablesdb/delete-rows.md @@ -12,5 +12,6 @@ tables_db = TablesDB.new(client) result = tables_db.delete_rows( database_id: '', table_id: '', - queries: [] # optional + queries: [], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/delete-transaction.md b/docs/examples/tablesdb/delete-transaction.md new file mode 100644 index 0000000..8fa7b3b --- /dev/null +++ b/docs/examples/tablesdb/delete-transaction.md @@ -0,0 +1,14 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +tables_db = TablesDB.new(client) + +result = tables_db.delete_transaction( + transaction_id: '' +) diff --git a/docs/examples/tablesdb/get-row.md b/docs/examples/tablesdb/get-row.md index 621c2e1..bdc1cf5 100644 --- a/docs/examples/tablesdb/get-row.md +++ b/docs/examples/tablesdb/get-row.md @@ -13,5 +13,6 @@ result = tables_db.get_row( database_id: '', table_id: '', row_id: '', - queries: [] # optional + queries: [], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/get-transaction.md b/docs/examples/tablesdb/get-transaction.md new file mode 100644 index 0000000..ce8468b --- /dev/null +++ b/docs/examples/tablesdb/get-transaction.md @@ -0,0 +1,14 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +tables_db = TablesDB.new(client) + +result = tables_db.get_transaction( + transaction_id: '' +) diff --git a/docs/examples/tablesdb/increment-row-column.md b/docs/examples/tablesdb/increment-row-column.md index bf9b6cc..a20d2f5 100644 --- a/docs/examples/tablesdb/increment-row-column.md +++ b/docs/examples/tablesdb/increment-row-column.md @@ -15,5 +15,6 @@ result = tables_db.increment_row_column( row_id: '', column: '', value: null, # optional - max: null # optional + max: null, # optional + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/list-rows.md b/docs/examples/tablesdb/list-rows.md index af971fb..b205cec 100644 --- a/docs/examples/tablesdb/list-rows.md +++ b/docs/examples/tablesdb/list-rows.md @@ -12,5 +12,6 @@ tables_db = TablesDB.new(client) result = tables_db.list_rows( database_id: '', table_id: '', - queries: [] # optional + queries: [], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/list-transactions.md b/docs/examples/tablesdb/list-transactions.md new file mode 100644 index 0000000..e969bc9 --- /dev/null +++ b/docs/examples/tablesdb/list-transactions.md @@ -0,0 +1,14 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +tables_db = TablesDB.new(client) + +result = tables_db.list_transactions( + queries: [] # optional +) diff --git a/docs/examples/tablesdb/update-row.md b/docs/examples/tablesdb/update-row.md index 7a48c5e..0212305 100644 --- a/docs/examples/tablesdb/update-row.md +++ b/docs/examples/tablesdb/update-row.md @@ -14,5 +14,6 @@ result = tables_db.update_row( table_id: '', row_id: '', data: {}, # optional - permissions: ["read("any")"] # optional + permissions: ["read("any")"], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/update-rows.md b/docs/examples/tablesdb/update-rows.md index 7316241..7c538a1 100644 --- a/docs/examples/tablesdb/update-rows.md +++ b/docs/examples/tablesdb/update-rows.md @@ -13,5 +13,6 @@ result = tables_db.update_rows( database_id: '', table_id: '', data: {}, # optional - queries: [] # optional + queries: [], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/update-transaction.md b/docs/examples/tablesdb/update-transaction.md new file mode 100644 index 0000000..2b8b3e7 --- /dev/null +++ b/docs/examples/tablesdb/update-transaction.md @@ -0,0 +1,16 @@ +require 'appwrite' + +include Appwrite + +client = Client.new + .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint + .set_project('') # Your project ID + .set_key('') # Your secret API key + +tables_db = TablesDB.new(client) + +result = tables_db.update_transaction( + transaction_id: '', + commit: false, # optional + rollback: false # optional +) diff --git a/docs/examples/tablesdb/upsert-row.md b/docs/examples/tablesdb/upsert-row.md index 5eb4281..9feb685 100644 --- a/docs/examples/tablesdb/upsert-row.md +++ b/docs/examples/tablesdb/upsert-row.md @@ -14,5 +14,6 @@ result = tables_db.upsert_row( table_id: '', row_id: '', data: {}, # optional - permissions: ["read("any")"] # optional + permissions: ["read("any")"], # optional + transaction_id: '' # optional ) diff --git a/docs/examples/tablesdb/upsert-rows.md b/docs/examples/tablesdb/upsert-rows.md index c48211d..e38f534 100644 --- a/docs/examples/tablesdb/upsert-rows.md +++ b/docs/examples/tablesdb/upsert-rows.md @@ -12,5 +12,6 @@ tables_db = TablesDB.new(client) result = tables_db.upsert_rows( database_id: '', table_id: '', - rows: [] + rows: [], + transaction_id: '' # optional ) diff --git a/lib/appwrite.rb b/lib/appwrite.rb index 616b0fe..e47781c 100644 --- a/lib/appwrite.rb +++ b/lib/appwrite.rb @@ -46,6 +46,7 @@ require_relative 'appwrite/models/topic_list' require_relative 'appwrite/models/subscriber_list' require_relative 'appwrite/models/target_list' +require_relative 'appwrite/models/transaction_list' require_relative 'appwrite/models/specification_list' require_relative 'appwrite/models/database' require_relative 'appwrite/models/collection' @@ -130,6 +131,7 @@ require_relative 'appwrite/models/provider' require_relative 'appwrite/models/message' require_relative 'appwrite/models/topic' +require_relative 'appwrite/models/transaction' require_relative 'appwrite/models/subscriber' require_relative 'appwrite/models/target' diff --git a/lib/appwrite/client.rb b/lib/appwrite/client.rb index 38bc7cf..9c57a2f 100644 --- a/lib/appwrite/client.rb +++ b/lib/appwrite/client.rb @@ -15,7 +15,7 @@ def initialize 'x-sdk-name'=> 'Ruby', 'x-sdk-platform'=> 'server', 'x-sdk-language'=> 'ruby', - 'x-sdk-version'=> '19.1.0', + 'x-sdk-version'=> '19.2.0', 'X-Appwrite-Response-Format' => '1.8.0' } @endpoint = 'https://cloud.appwrite.io/v1' diff --git a/lib/appwrite/models/transaction.rb b/lib/appwrite/models/transaction.rb new file mode 100644 index 0000000..a5e3456 --- /dev/null +++ b/lib/appwrite/models/transaction.rb @@ -0,0 +1,52 @@ +#frozen_string_literal: true + +module Appwrite + module Models + class Transaction + attr_reader :id + attr_reader :created_at + attr_reader :updated_at + attr_reader :status + attr_reader :operations + attr_reader :expires_at + + def initialize( + id:, + created_at:, + updated_at:, + status:, + operations:, + expires_at: + ) + @id = id + @created_at = created_at + @updated_at = updated_at + @status = status + @operations = operations + @expires_at = expires_at + end + + def self.from(map:) + Transaction.new( + id: map["$id"], + created_at: map["$createdAt"], + updated_at: map["$updatedAt"], + status: map["status"], + operations: map["operations"], + expires_at: map["expiresAt"] + ) + end + + def to_map + { + "$id": @id, + "$createdAt": @created_at, + "$updatedAt": @updated_at, + "status": @status, + "operations": @operations, + "expiresAt": @expires_at + } + end + end + end +end diff --git a/lib/appwrite/models/transaction_list.rb b/lib/appwrite/models/transaction_list.rb new file mode 100644 index 0000000..af4c464 --- /dev/null +++ b/lib/appwrite/models/transaction_list.rb @@ -0,0 +1,32 @@ +#frozen_string_literal: true + +module Appwrite + module Models + class TransactionList + attr_reader :total + attr_reader :transactions + + def initialize( + total:, + transactions: + ) + @total = total + @transactions = transactions + end + + def self.from(map:) + TransactionList.new( + total: map["total"], + transactions: map["transactions"].map { |it| Transaction.from(map: it) } + ) + end + + def to_map + { + "total": @total, + "transactions": @transactions.map { |it| it.to_map } + } + end + end + end +end diff --git a/lib/appwrite/services/databases.rb b/lib/appwrite/services/databases.rb index 4ce7a3d..07b75cc 100644 --- a/lib/appwrite/services/databases.rb +++ b/lib/appwrite/services/databases.rb @@ -78,6 +78,175 @@ def create(database_id:, name:, enabled: nil) ) end + # List transactions across all databases. + # + # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). + # + # @return [TransactionList] + def list_transactions(queries: nil) + api_path = '/databases/transactions' + + api_params = { + queries: queries, + } + + api_headers = { + } + + @client.call( + method: 'GET', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::TransactionList + ) + end + + # Create a new transaction. + # + # @param [Integer] ttl Seconds before the transaction expires. + # + # @return [Transaction] + def create_transaction(ttl: nil) + api_path = '/databases/transactions' + + api_params = { + ttl: ttl, + } + + api_headers = { + "content-type": 'application/json', + } + + @client.call( + method: 'POST', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::Transaction + ) + end + + # Get a transaction by its unique ID. + # + # @param [String] transaction_id Transaction ID. + # + # @return [Transaction] + def get_transaction(transaction_id:) + api_path = '/databases/transactions/{transactionId}' + .gsub('{transactionId}', transaction_id) + + if transaction_id.nil? + raise Appwrite::Exception.new('Missing required parameter: "transactionId"') + end + + api_params = { + } + + api_headers = { + } + + @client.call( + method: 'GET', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::Transaction + ) + end + + # Update a transaction, to either commit or roll back its operations. + # + # @param [String] transaction_id Transaction ID. + # @param [] commit Commit transaction? + # @param [] rollback Rollback transaction? + # + # @return [Transaction] + def update_transaction(transaction_id:, commit: nil, rollback: nil) + api_path = '/databases/transactions/{transactionId}' + .gsub('{transactionId}', transaction_id) + + if transaction_id.nil? + raise Appwrite::Exception.new('Missing required parameter: "transactionId"') + end + + api_params = { + commit: commit, + rollback: rollback, + } + + api_headers = { + "content-type": 'application/json', + } + + @client.call( + method: 'PATCH', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::Transaction + ) + end + + # Delete a transaction by its unique ID. + # + # @param [String] transaction_id Transaction ID. + # + # @return [] + def delete_transaction(transaction_id:) + api_path = '/databases/transactions/{transactionId}' + .gsub('{transactionId}', transaction_id) + + if transaction_id.nil? + raise Appwrite::Exception.new('Missing required parameter: "transactionId"') + end + + api_params = { + } + + api_headers = { + "content-type": 'application/json', + } + + @client.call( + method: 'DELETE', + path: api_path, + headers: api_headers, + params: api_params, + ) + end + + # Create multiple operations in a single transaction. + # + # @param [String] transaction_id Transaction ID. + # @param [Array] operations Array of staged operations. + # + # @return [Transaction] + def create_operations(transaction_id:, operations: nil) + api_path = '/databases/transactions/{transactionId}/operations' + .gsub('{transactionId}', transaction_id) + + if transaction_id.nil? + raise Appwrite::Exception.new('Missing required parameter: "transactionId"') + end + + api_params = { + operations: operations, + } + + api_headers = { + "content-type": 'application/json', + } + + @client.call( + method: 'POST', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::Transaction + ) + end + # # @deprecated This API has been deprecated since 1.8.0. Please use `TablesDB.get` instead. # @@ -2034,9 +2203,10 @@ def update_relationship_attribute(database_id:, collection_id:, key:, on_delete: # @param [String] database_id Database ID. # @param [String] collection_id Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + # @param [String] transaction_id Transaction ID to read uncommitted changes within the transaction. # # @return [DocumentList] - def list_documents(database_id:, collection_id:, queries: nil) + def list_documents(database_id:, collection_id:, queries: nil, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2051,6 +2221,7 @@ def list_documents(database_id:, collection_id:, queries: nil) api_params = { queries: queries, + transactionId: transaction_id, } api_headers = { @@ -2078,9 +2249,10 @@ def list_documents(database_id:, collection_id:, queries: nil) # @param [String] document_id Document ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. # @param [Hash] data Document data as JSON object. # @param [Array] permissions An array of permissions strings. By default, only the current user is granted all permissions. [Learn more about permissions](https://appwrite.io/docs/permissions). + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Document] - def create_document(database_id:, collection_id:, document_id:, data:, permissions: nil) + def create_document(database_id:, collection_id:, document_id:, data:, permissions: nil, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2105,6 +2277,7 @@ def create_document(database_id:, collection_id:, document_id:, data:, permissio documentId: document_id, data: data, permissions: permissions, + transactionId: transaction_id, } api_headers = { @@ -2131,9 +2304,10 @@ def create_document(database_id:, collection_id:, document_id:, data:, permissio # @param [String] database_id Database ID. # @param [String] collection_id Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). Make sure to define attributes before creating documents. # @param [Array] documents Array of documents data as JSON objects. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [DocumentList] - def create_documents(database_id:, collection_id:, documents:) + def create_documents(database_id:, collection_id:, documents:, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2152,6 +2326,7 @@ def create_documents(database_id:, collection_id:, documents:) api_params = { documents: documents, + transactionId: transaction_id, } api_headers = { @@ -2179,9 +2354,10 @@ def create_documents(database_id:, collection_id:, documents:) # @param [String] database_id Database ID. # @param [String] collection_id Collection ID. # @param [Array] documents Array of document data as JSON objects. May contain partial documents. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [DocumentList] - def upsert_documents(database_id:, collection_id:, documents:) + def upsert_documents(database_id:, collection_id:, documents:, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2200,6 +2376,7 @@ def upsert_documents(database_id:, collection_id:, documents:) api_params = { documents: documents, + transactionId: transaction_id, } api_headers = { @@ -2226,9 +2403,10 @@ def upsert_documents(database_id:, collection_id:, documents:) # @param [String] collection_id Collection ID. # @param [Hash] data Document data as JSON object. Include only attribute and value pairs to be updated. # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [DocumentList] - def update_documents(database_id:, collection_id:, data: nil, queries: nil) + def update_documents(database_id:, collection_id:, data: nil, queries: nil, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2244,6 +2422,7 @@ def update_documents(database_id:, collection_id:, data: nil, queries: nil) api_params = { data: data, queries: queries, + transactionId: transaction_id, } api_headers = { @@ -2268,9 +2447,10 @@ def update_documents(database_id:, collection_id:, data: nil, queries: nil) # @param [String] database_id Database ID. # @param [String] collection_id Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [DocumentList] - def delete_documents(database_id:, collection_id:, queries: nil) + def delete_documents(database_id:, collection_id:, queries: nil, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2285,6 +2465,7 @@ def delete_documents(database_id:, collection_id:, queries: nil) api_params = { queries: queries, + transactionId: transaction_id, } api_headers = { @@ -2310,9 +2491,10 @@ def delete_documents(database_id:, collection_id:, queries: nil) # @param [String] collection_id Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). # @param [String] document_id Document ID. # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + # @param [String] transaction_id Transaction ID to read uncommitted changes within the transaction. # # @return [Document] - def get_document(database_id:, collection_id:, document_id:, queries: nil) + def get_document(database_id:, collection_id:, document_id:, queries: nil, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2332,6 +2514,7 @@ def get_document(database_id:, collection_id:, document_id:, queries: nil) api_params = { queries: queries, + transactionId: transaction_id, } api_headers = { @@ -2359,9 +2542,10 @@ def get_document(database_id:, collection_id:, document_id:, queries: nil) # @param [String] document_id Document ID. # @param [Hash] data Document data as JSON object. Include all required attributes of the document to be created or updated. # @param [Array] permissions An array of permissions strings. By default, the current permissions are inherited. [Learn more about permissions](https://appwrite.io/docs/permissions). + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Document] - def upsert_document(database_id:, collection_id:, document_id:, data:, permissions: nil) + def upsert_document(database_id:, collection_id:, document_id:, data:, permissions: nil, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2386,6 +2570,7 @@ def upsert_document(database_id:, collection_id:, document_id:, data:, permissio api_params = { data: data, permissions: permissions, + transactionId: transaction_id, } api_headers = { @@ -2412,9 +2597,10 @@ def upsert_document(database_id:, collection_id:, document_id:, data:, permissio # @param [String] document_id Document ID. # @param [Hash] data Document data as JSON object. Include only attribute and value pairs to be updated. # @param [Array] permissions An array of permissions strings. By default, the current permissions are inherited. [Learn more about permissions](https://appwrite.io/docs/permissions). + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Document] - def update_document(database_id:, collection_id:, document_id:, data: nil, permissions: nil) + def update_document(database_id:, collection_id:, document_id:, data: nil, permissions: nil, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2435,6 +2621,7 @@ def update_document(database_id:, collection_id:, document_id:, data: nil, permi api_params = { data: data, permissions: permissions, + transactionId: transaction_id, } api_headers = { @@ -2458,9 +2645,10 @@ def update_document(database_id:, collection_id:, document_id:, data: nil, permi # @param [String] database_id Database ID. # @param [String] collection_id Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). # @param [String] document_id Document ID. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [] - def delete_document(database_id:, collection_id:, document_id:) + def delete_document(database_id:, collection_id:, document_id:, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2479,6 +2667,7 @@ def delete_document(database_id:, collection_id:, document_id:) end api_params = { + transactionId: transaction_id, } api_headers = { @@ -2504,9 +2693,10 @@ def delete_document(database_id:, collection_id:, document_id:) # @param [String] attribute Attribute key. # @param [Float] value Value to increment the attribute by. The value must be a number. # @param [Float] min Minimum value for the attribute. If the current value is lesser than this value, an exception will be thrown. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Document] - def decrement_document_attribute(database_id:, collection_id:, document_id:, attribute:, value: nil, min: nil) + def decrement_document_attribute(database_id:, collection_id:, document_id:, attribute:, value: nil, min: nil, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/decrement' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2532,6 +2722,7 @@ def decrement_document_attribute(database_id:, collection_id:, document_id:, att api_params = { value: value, min: min, + transactionId: transaction_id, } api_headers = { @@ -2558,9 +2749,10 @@ def decrement_document_attribute(database_id:, collection_id:, document_id:, att # @param [String] attribute Attribute key. # @param [Float] value Value to increment the attribute by. The value must be a number. # @param [Float] max Maximum value for the attribute. If the current value is greater than this value, an error will be thrown. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Document] - def increment_document_attribute(database_id:, collection_id:, document_id:, attribute:, value: nil, max: nil) + def increment_document_attribute(database_id:, collection_id:, document_id:, attribute:, value: nil, max: nil, transaction_id: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/increment' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2586,6 +2778,7 @@ def increment_document_attribute(database_id:, collection_id:, document_id:, att api_params = { value: value, max: max, + transactionId: transaction_id, } api_headers = { @@ -2705,7 +2898,7 @@ def create_index(database_id:, collection_id:, key:, type:, attributes:, orders: # # @deprecated This API has been deprecated since 1.8.0. Please use `TablesDB.getIndex` instead. # - # Get index by ID. + # Get an index by its unique ID. # # @param [String] database_id Database ID. # @param [String] collection_id Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). diff --git a/lib/appwrite/services/tables_db.rb b/lib/appwrite/services/tables_db.rb index ad49104..f69bf12 100644 --- a/lib/appwrite/services/tables_db.rb +++ b/lib/appwrite/services/tables_db.rb @@ -72,6 +72,175 @@ def create(database_id:, name:, enabled: nil) ) end + # List transactions across all databases. + # + # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). + # + # @return [TransactionList] + def list_transactions(queries: nil) + api_path = '/tablesdb/transactions' + + api_params = { + queries: queries, + } + + api_headers = { + } + + @client.call( + method: 'GET', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::TransactionList + ) + end + + # Create a new transaction. + # + # @param [Integer] ttl Seconds before the transaction expires. + # + # @return [Transaction] + def create_transaction(ttl: nil) + api_path = '/tablesdb/transactions' + + api_params = { + ttl: ttl, + } + + api_headers = { + "content-type": 'application/json', + } + + @client.call( + method: 'POST', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::Transaction + ) + end + + # Get a transaction by its unique ID. + # + # @param [String] transaction_id Transaction ID. + # + # @return [Transaction] + def get_transaction(transaction_id:) + api_path = '/tablesdb/transactions/{transactionId}' + .gsub('{transactionId}', transaction_id) + + if transaction_id.nil? + raise Appwrite::Exception.new('Missing required parameter: "transactionId"') + end + + api_params = { + } + + api_headers = { + } + + @client.call( + method: 'GET', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::Transaction + ) + end + + # Update a transaction, to either commit or roll back its operations. + # + # @param [String] transaction_id Transaction ID. + # @param [] commit Commit transaction? + # @param [] rollback Rollback transaction? + # + # @return [Transaction] + def update_transaction(transaction_id:, commit: nil, rollback: nil) + api_path = '/tablesdb/transactions/{transactionId}' + .gsub('{transactionId}', transaction_id) + + if transaction_id.nil? + raise Appwrite::Exception.new('Missing required parameter: "transactionId"') + end + + api_params = { + commit: commit, + rollback: rollback, + } + + api_headers = { + "content-type": 'application/json', + } + + @client.call( + method: 'PATCH', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::Transaction + ) + end + + # Delete a transaction by its unique ID. + # + # @param [String] transaction_id Transaction ID. + # + # @return [] + def delete_transaction(transaction_id:) + api_path = '/tablesdb/transactions/{transactionId}' + .gsub('{transactionId}', transaction_id) + + if transaction_id.nil? + raise Appwrite::Exception.new('Missing required parameter: "transactionId"') + end + + api_params = { + } + + api_headers = { + "content-type": 'application/json', + } + + @client.call( + method: 'DELETE', + path: api_path, + headers: api_headers, + params: api_params, + ) + end + + # Create multiple operations in a single transaction. + # + # @param [String] transaction_id Transaction ID. + # @param [Array] operations Array of staged operations. + # + # @return [Transaction] + def create_operations(transaction_id:, operations: nil) + api_path = '/tablesdb/transactions/{transactionId}/operations' + .gsub('{transactionId}', transaction_id) + + if transaction_id.nil? + raise Appwrite::Exception.new('Missing required parameter: "transactionId"') + end + + api_params = { + operations: operations, + } + + api_headers = { + "content-type": 'application/json', + } + + @client.call( + method: 'POST', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::Transaction + ) + end + # Get a database by its unique ID. This endpoint response returns a JSON # object with the database metadata. # @@ -2088,9 +2257,10 @@ def delete_index(database_id:, table_id:, key:) # @param [String] database_id Database ID. # @param [String] table_id Table ID. You can create a new table using the TablesDB service [server integration](https://appwrite.io/docs/products/databases/tables#create-table). # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + # @param [String] transaction_id Transaction ID to read uncommitted changes within the transaction. # # @return [RowList] - def list_rows(database_id:, table_id:, queries: nil) + def list_rows(database_id:, table_id:, queries: nil, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2105,6 +2275,7 @@ def list_rows(database_id:, table_id:, queries: nil) api_params = { queries: queries, + transactionId: transaction_id, } api_headers = { @@ -2129,9 +2300,10 @@ def list_rows(database_id:, table_id:, queries: nil) # @param [String] row_id Row ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. # @param [Hash] data Row data as JSON object. # @param [Array] permissions An array of permissions strings. By default, only the current user is granted all permissions. [Learn more about permissions](https://appwrite.io/docs/permissions). + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Row] - def create_row(database_id:, table_id:, row_id:, data:, permissions: nil) + def create_row(database_id:, table_id:, row_id:, data:, permissions: nil, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2156,6 +2328,7 @@ def create_row(database_id:, table_id:, row_id:, data:, permissions: nil) rowId: row_id, data: data, permissions: permissions, + transactionId: transaction_id, } api_headers = { @@ -2179,9 +2352,10 @@ def create_row(database_id:, table_id:, row_id:, data:, permissions: nil) # @param [String] database_id Database ID. # @param [String] table_id Table ID. You can create a new table using the Database service [server integration](https://appwrite.io/docs/references/cloud/server-dart/tablesDB#createTable). Make sure to define columns before creating rows. # @param [Array] rows Array of rows data as JSON objects. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [RowList] - def create_rows(database_id:, table_id:, rows:) + def create_rows(database_id:, table_id:, rows:, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2200,6 +2374,7 @@ def create_rows(database_id:, table_id:, rows:) api_params = { rows: rows, + transactionId: transaction_id, } api_headers = { @@ -2224,9 +2399,10 @@ def create_rows(database_id:, table_id:, rows:) # @param [String] database_id Database ID. # @param [String] table_id Table ID. # @param [Array] rows Array of row data as JSON objects. May contain partial rows. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [RowList] - def upsert_rows(database_id:, table_id:, rows:) + def upsert_rows(database_id:, table_id:, rows:, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2245,6 +2421,7 @@ def upsert_rows(database_id:, table_id:, rows:) api_params = { rows: rows, + transactionId: transaction_id, } api_headers = { @@ -2267,9 +2444,10 @@ def upsert_rows(database_id:, table_id:, rows:) # @param [String] table_id Table ID. # @param [Hash] data Row data as JSON object. Include only column and value pairs to be updated. # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [RowList] - def update_rows(database_id:, table_id:, data: nil, queries: nil) + def update_rows(database_id:, table_id:, data: nil, queries: nil, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2285,6 +2463,7 @@ def update_rows(database_id:, table_id:, data: nil, queries: nil) api_params = { data: data, queries: queries, + transactionId: transaction_id, } api_headers = { @@ -2306,9 +2485,10 @@ def update_rows(database_id:, table_id:, data: nil, queries: nil) # @param [String] database_id Database ID. # @param [String] table_id Table ID. You can create a new table using the Database service [server integration](https://appwrite.io/docs/references/cloud/server-dart/tablesDB#createTable). # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [RowList] - def delete_rows(database_id:, table_id:, queries: nil) + def delete_rows(database_id:, table_id:, queries: nil, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2323,6 +2503,7 @@ def delete_rows(database_id:, table_id:, queries: nil) api_params = { queries: queries, + transactionId: transaction_id, } api_headers = { @@ -2345,9 +2526,10 @@ def delete_rows(database_id:, table_id:, queries: nil) # @param [String] table_id Table ID. You can create a new table using the Database service [server integration](https://appwrite.io/docs/references/cloud/server-dart/tablesDB#createTable). # @param [String] row_id Row ID. # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + # @param [String] transaction_id Transaction ID to read uncommitted changes within the transaction. # # @return [Row] - def get_row(database_id:, table_id:, row_id:, queries: nil) + def get_row(database_id:, table_id:, row_id:, queries: nil, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2367,6 +2549,7 @@ def get_row(database_id:, table_id:, row_id:, queries: nil) api_params = { queries: queries, + transactionId: transaction_id, } api_headers = { @@ -2391,9 +2574,10 @@ def get_row(database_id:, table_id:, row_id:, queries: nil) # @param [String] row_id Row ID. # @param [Hash] data Row data as JSON object. Include all required columns of the row to be created or updated. # @param [Array] permissions An array of permissions strings. By default, the current permissions are inherited. [Learn more about permissions](https://appwrite.io/docs/permissions). + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Row] - def upsert_row(database_id:, table_id:, row_id:, data: nil, permissions: nil) + def upsert_row(database_id:, table_id:, row_id:, data: nil, permissions: nil, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2414,6 +2598,7 @@ def upsert_row(database_id:, table_id:, row_id:, data: nil, permissions: nil) api_params = { data: data, permissions: permissions, + transactionId: transaction_id, } api_headers = { @@ -2437,9 +2622,10 @@ def upsert_row(database_id:, table_id:, row_id:, data: nil, permissions: nil) # @param [String] row_id Row ID. # @param [Hash] data Row data as JSON object. Include only columns and value pairs to be updated. # @param [Array] permissions An array of permissions strings. By default, the current permissions are inherited. [Learn more about permissions](https://appwrite.io/docs/permissions). + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Row] - def update_row(database_id:, table_id:, row_id:, data: nil, permissions: nil) + def update_row(database_id:, table_id:, row_id:, data: nil, permissions: nil, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2460,6 +2646,7 @@ def update_row(database_id:, table_id:, row_id:, data: nil, permissions: nil) api_params = { data: data, permissions: permissions, + transactionId: transaction_id, } api_headers = { @@ -2480,9 +2667,10 @@ def update_row(database_id:, table_id:, row_id:, data: nil, permissions: nil) # @param [String] database_id Database ID. # @param [String] table_id Table ID. You can create a new table using the Database service [server integration](https://appwrite.io/docs/references/cloud/server-dart/tablesDB#createTable). # @param [String] row_id Row ID. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [] - def delete_row(database_id:, table_id:, row_id:) + def delete_row(database_id:, table_id:, row_id:, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2501,6 +2689,7 @@ def delete_row(database_id:, table_id:, row_id:) end api_params = { + transactionId: transaction_id, } api_headers = { @@ -2523,9 +2712,10 @@ def delete_row(database_id:, table_id:, row_id:) # @param [String] column Column key. # @param [Float] value Value to increment the column by. The value must be a number. # @param [Float] min Minimum value for the column. If the current value is lesser than this value, an exception will be thrown. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Row] - def decrement_row_column(database_id:, table_id:, row_id:, column:, value: nil, min: nil) + def decrement_row_column(database_id:, table_id:, row_id:, column:, value: nil, min: nil, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/decrement' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2551,6 +2741,7 @@ def decrement_row_column(database_id:, table_id:, row_id:, column:, value: nil, api_params = { value: value, min: min, + transactionId: transaction_id, } api_headers = { @@ -2574,9 +2765,10 @@ def decrement_row_column(database_id:, table_id:, row_id:, column:, value: nil, # @param [String] column Column key. # @param [Float] value Value to increment the column by. The value must be a number. # @param [Float] max Maximum value for the column. If the current value is greater than this value, an error will be thrown. + # @param [String] transaction_id Transaction ID for staging the operation. # # @return [Row] - def increment_row_column(database_id:, table_id:, row_id:, column:, value: nil, max: nil) + def increment_row_column(database_id:, table_id:, row_id:, column:, value: nil, max: nil, transaction_id: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/increment' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2602,6 +2794,7 @@ def increment_row_column(database_id:, table_id:, row_id:, column:, value: nil, api_params = { value: value, max: max, + transactionId: transaction_id, } api_headers = {