From 1e82c7f0ef37d4e9b6a37ee1126757a26b9a6036 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Tue, 17 Jun 2025 21:54:30 -0400 Subject: [PATCH] Add listTransactions --- app/controllers/api/databases.php | 35 +++++++++++++++++++ .../Utopia/Database/Validator/Operation.php | 2 +- .../Validator/Queries/Transactions.php | 16 +++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/Appwrite/Utopia/Database/Validator/Queries/Transactions.php diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index 0159b199c7..9819377f9d 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -1621,6 +1621,41 @@ App::post('/v1/databases/transactions/:transactionId/operations') ->dynamic($transaction, Response::MODEL_TRANSACTION); }); +App::get('/v1/databases/transactions') + ->desc('List transactions') + ->groups(['api', 'database', 'transactions']) + ->label('scope', 'transactions.read') + ->label('resourceType', RESOURCE_TYPE_DATABASES) + ->label('sdk', new Method( + namespace: 'databases', + group: 'transactions', + name: 'listTransactions', + description: '/docs/references/databases/list-transactions.md', + auth: [AuthType::KEY], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_TRANSACTION_LIST, + ) + ], + contentType: ContentType::JSON + )) + ->param('queries', [], new Transactions(), 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries).', true) + ->inject('response') + ->inject('dbForProject') + ->action(function (array $queries, Response $response, Database $dbForProject) { + try { + $queries = Query::parseQueries($queries); + } catch (QueryException $e) { + throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); + } + + $response->dynamic(new Document([ + 'transactions' => $dbForProject->find('transactions', $queries), + 'total' => $dbForProject->count('transactions', $queries), + ]), Response::MODEL_TRANSACTION_LIST); + }); + App::get('/v1/databases/transactions/:transactionId') ->desc('Get transaction') ->groups(['api', 'database', 'transactions']) diff --git a/src/Appwrite/Utopia/Database/Validator/Operation.php b/src/Appwrite/Utopia/Database/Validator/Operation.php index 45122df800..989fd76eec 100644 --- a/src/Appwrite/Utopia/Database/Validator/Operation.php +++ b/src/Appwrite/Utopia/Database/Validator/Operation.php @@ -19,9 +19,9 @@ class Operation extends Validator private array $actions = [ 'create', 'update', - 'bulkUpdate', 'upsert', 'delete', + 'bulkUpdate', 'bulkDelete', ]; diff --git a/src/Appwrite/Utopia/Database/Validator/Queries/Transactions.php b/src/Appwrite/Utopia/Database/Validator/Queries/Transactions.php new file mode 100644 index 0000000000..ab3e933d6f --- /dev/null +++ b/src/Appwrite/Utopia/Database/Validator/Queries/Transactions.php @@ -0,0 +1,16 @@ +