From 7120bce761aa3401d5065e7c3bf9eb6f2dc705a7 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Fri, 12 Sep 2025 21:47:40 +1200 Subject: [PATCH] Handle structure exception --- .../Http/Databases/Transactions/Operations/Create.php | 2 +- .../Databases/Http/Databases/Transactions/Update.php | 7 ++++++- .../Http/TablesDB/Transactions/Operations/Create.php | 2 +- .../Databases/Legacy/Transactions/TransactionsTest.php | 2 +- .../Databases/TablesDB/Transactions/TransactionsTest.php | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Operations/Create.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Operations/Create.php index a33af05e3d..d2e438706a 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Operations/Create.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Operations/Create.php @@ -36,7 +36,7 @@ class Create extends Action $this ->setHttpMethod(self::HTTP_REQUEST_METHOD_POST) ->setHttpPath('/v1/databases/transactions/:transactionId/operations') - ->desc('Add operations to transaction') + ->desc('Create operations scoped to a transaction') ->groups(['api', 'database', 'transactions']) ->label('scope', 'transactions.write') ->label('resourceType', RESOURCE_TYPE_DATABASES) diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php index 54b339a46c..2c555d433c 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php @@ -17,7 +17,7 @@ use Utopia\Database\Exception\Authorization; use Utopia\Database\Exception\Conflict as ConflictException; use Utopia\Database\Exception\Duplicate as DuplicateException; use Utopia\Database\Exception\NotFound as NotFoundException; -use Utopia\Database\Exception\Structure; +use Utopia\Database\Exception\Structure as StructureException; use Utopia\Database\Exception\Transaction as TransactionException; use Utopia\Database\Query; use Utopia\Database\Validator\UID; @@ -210,6 +210,11 @@ class Update extends Action 'status' => 'failed', ])); throw new Exception(Exception::TRANSACTION_CONFLICT, previous: $e); + } catch (StructureException $e) { + $dbForProject->updateDocument('transactions', $transactionId, new Document([ + 'status' => 'failed', + ])); + throw new Exception(Exception::DOCUMENT_INVALID_STRUCTURE, $e->getMessage()); } catch (TransactionException $e) { $dbForProject->updateDocument('transactions', $transactionId, new Document([ 'status' => 'failed', diff --git a/src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Transactions/Operations/Create.php b/src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Transactions/Operations/Create.php index 6b2ee2ce4c..2280a6f7e3 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Transactions/Operations/Create.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Transactions/Operations/Create.php @@ -30,7 +30,7 @@ class Create extends OperationsCreate $this ->setHttpMethod(self::HTTP_REQUEST_METHOD_POST) ->setHttpPath('/v1/tablesdb/transactions/:transactionId/operations') - ->desc('Add operations to transaction') + ->desc('Create operations scoped to a transaction') ->groups(['api', 'database', 'transactions']) ->label('scope', 'transactions.write') ->label('resourceType', RESOURCE_TYPE_DATABASES) diff --git a/tests/e2e/Services/Databases/Legacy/Transactions/TransactionsTest.php b/tests/e2e/Services/Databases/Legacy/Transactions/TransactionsTest.php index 02e3082626..9d8cb7961e 100644 --- a/tests/e2e/Services/Databases/Legacy/Transactions/TransactionsTest.php +++ b/tests/e2e/Services/Databases/Legacy/Transactions/TransactionsTest.php @@ -96,7 +96,7 @@ class TransactionsTest extends Scope /** * Test adding operations to a transaction */ - public function testAddOperations(): void + public function testCreateOperations(): void { // Create database first $database = $this->client->call(Client::METHOD_POST, '/databases', array_merge([ diff --git a/tests/e2e/Services/Databases/TablesDB/Transactions/TransactionsTest.php b/tests/e2e/Services/Databases/TablesDB/Transactions/TransactionsTest.php index 30bb4cb290..68f0afb835 100644 --- a/tests/e2e/Services/Databases/TablesDB/Transactions/TransactionsTest.php +++ b/tests/e2e/Services/Databases/TablesDB/Transactions/TransactionsTest.php @@ -96,7 +96,7 @@ class TransactionsTest extends Scope /** * Test adding operations to a transaction */ - public function testAddOperations(): void + public function testCreateOperations(): void { // Create database first $database = $this->client->call(Client::METHOD_POST, '/tablesdb', array_merge([