From 0d29968169fdc10be8c64a24abbbd0d31dbe8d5e Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Sun, 30 Oct 2022 05:14:46 +0000 Subject: [PATCH] refactor database listener callback --- app/controllers/shared/api.php | 115 +++++++++++++-------------------- 1 file changed, 44 insertions(+), 71 deletions(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index c6597c3396..915a31bc34 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -48,6 +48,47 @@ $parseLabel = function (string $label, array $responsePayload, array $requestPar return $label; }; +$databaseListener = function (string $event, Document $document, Stats $usage) { + $multiplier = 1; + if($event === Database::EVENT_DOCUMENT_DELETE) { + $multiplier = -1; + } + + $collection = $document->getCollection(); + switch ($collection) { + case 'users': + $usage->setParam('users.{scope}.count.total', 1 * $multiplier); + break; + case 'databases': + $usage->setParam('databases.{scope}.count.total', 1 * $multiplier); + break; + case 'buckets': + $usage->setParam('buckets.{scope}.count.total', 1 * $multiplier); + break; + case 'deployments': + $usage->setParam('deployments.{scope}.storage.size', $document->getAttribute('size') * $multiplier); + break; + default: + if (strpos($collection, 'bucket_') === 0) { + $usage + ->setParam('bucketId', $document->getAttribute('bucketId')) + ->setParam('files.{scope}.storage.size', $document->getAttribute('sizeOriginal') * $multiplier) + ->setParam('files.{scope}.count.total', 1 * $multiplier); + } elseif (strpos($collection, 'database_') === 0) { + $usage + ->setParam('databaseId', $document->getAttribute('databaseId')); + if (strpos($collection, '_collection_') != false) { + $usage + ->setParam('collectionId', $document->getAttribute('$collectionId')) + ->setParam('documents.{scope}.count.total', 1 * $multiplier); + } else { + $usage->setParam('collections.{scope}.count.total', 1 * $multiplier); + } + } + break; + } +}; + App::init() ->groups(['api']) ->inject('utopia') @@ -63,7 +104,7 @@ App::init() ->inject('database') ->inject('dbForProject') ->inject('mode') - ->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Event $events, Audit $audits, Mail $mails, Stats $usage, Delete $deletes, EventDatabase $database, Database $dbForProject, string $mode) { + ->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Event $events, Audit $audits, Mail $mails, Stats $usage, Delete $deletes, EventDatabase $database, Database $dbForProject, string $mode) use ($databaseListener) { $route = $utopia->match($request); @@ -160,77 +201,9 @@ App::init() $deletes->setProject($project); $database->setProject($project); - $dbForProject->on(Database::EVENT_DOCUMENT_CREATE, function ($event, Document $document) use ($usage) { - $collection = $document->getCollection(); - switch ($collection) { - case 'users': - $usage->setParam('users.{scope}.count.total', 1); - break; - case 'databases': - $usage->setParam('databases.{scope}.count.total', 1); - break; - case 'buckets': - $usage->setParam('buckets.{scope}.count.total', 1); - break; - case 'deployments': - $usage->setParam('deployments.{scope}.storage.size', $document->getAttribute('size')); - break; - default: - if (strpos($collection, 'bucket_') === 0) { - $usage - ->setParam('bucketId', $document->getAttribute('bucketId')) - ->setParam('files.{scope}.storage.size', $document->getAttribute('sizeOriginal')) - ->setParam('files.{scope}.count.total', 1); - } elseif (strpos($collection, 'database_') === 0) { - $usage - ->setParam('databaseId', $document->getAttribute('databaseId')); - if (strpos($collection, '_collection_') != false) { - $usage - ->setParam('collectionId', $document->getAttribute('$collectionId')) - ->setParam('documents.{scope}.count.total', 1); - } else { - $usage->setParam('collections.{scope}.count.total', 1); - } - } - break; - } - }); + $dbForProject->on(Database::EVENT_DOCUMENT_CREATE, fn ($event, Document $document) => $databaseListener($event, $document, $usage)); - $dbForProject->on(Database::EVENT_DOCUMENT_DELETE, function ($event, Document $document) use ($usage) { - $collection = $document->getCollection(); - switch ($collection) { - case 'users': - $usage->setParam('users.{scope}.count.total', -1); - break; - case 'databases': - $usage->setParam('databases.{scope}.count.total', -1); - break; - case 'buckets': - $usage->setParam('buckets.{scope}.count.total', -1); - break; - case 'deployments': - $usage->setParam('deployments.{scope}.storage.size', -$document->getAttribute('size')); - break; - default: - if (strpos($collection, 'bucket_') === 0) { - $usage - ->setParam('bucketId', $document->getAttribute('bucketId')) - ->setParam('files.{scope}.storage.size', -$document->getAttribute('sizeOriginal')) - ->setParam('files.{scope}.count.total', -1); - } elseif (strpos($collection, 'database_') === 0) { - $usage - ->setParam('databaseId', $document->getAttribute('databaseId')); - if (strpos($collection, '_collection_') != false) { - $usage - ->setParam('collectionId', $document->getAttribute('collectionId')) - ->setParam('documents.{scope}.count.total', -1); - } else { - $usage->setParam('collections.{scope}.count.total', -1); - } - } - break; - } - }); + $dbForProject->on(Database::EVENT_DOCUMENT_DELETE, fn ($event, Document $document) => $databaseListener($event, $document, $usage)); $useCache = $route->getLabel('cache', false);