Revert "Don't accumulate docs on update/delete"

This reverts commit 8c1b9044b3.

# Conflicts:
#	app/controllers/api/databases.php
This commit is contained in:
Jake Barnby
2025-05-07 15:44:58 +12:00
parent f7d7b8d3dd
commit 572c49cc90
4 changed files with 43 additions and 72 deletions
+35 -21
View File
@@ -4202,7 +4202,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents')
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_BULK_OPERATION,
model: Response::MODEL_DOCUMENT_LIST,
)
],
contentType: ContentType::JSON
@@ -4290,6 +4290,17 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents')
$partialDocument = new Document($data);
$documents = [];
$dbForProject->updateDocuments(
'database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(),
$partialDocument,
$queries,
onNext: function (Document $document) use (&$documents) {
$documents[] = $document;
},
);
$operations = 0;
$processDocument = function (Document $collection, Document $document) use (&$processDocument, $dbForProject, $database, &$operations) {
@@ -4326,14 +4337,9 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents')
}
};
$modified = $dbForProject->updateDocuments(
'database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(),
$partialDocument,
$queries,
onNext: function (Document $document) use ($collection, &$processDocument) {
$processDocument($collection, $document);
},
);
foreach ($documents as $document) {
$processDocument($collection, $document);
}
$queueForStatsUsage
->addMetric(METRIC_DATABASES_OPERATIONS_WRITES, \max(1, $operations))
@@ -4341,8 +4347,9 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents')
$response
->dynamic(new Document([
'modified' => $modified
]), Response::MODEL_BULK_OPERATION);
'total' => \count($documents),
'documents' => $documents
]), Response::MODEL_DOCUMENT_LIST);
});
App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId')
@@ -4492,7 +4499,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents')
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_BULK_OPERATION,
model: Response::MODEL_DOCUMENT_LIST,
)
],
contentType: ContentType::JSON
@@ -4535,6 +4542,16 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents')
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
}
$documents = [];
$dbForProject->deleteDocuments(
'database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(),
$queries,
onNext: function (Document $document) use (&$documents) {
$documents[] = $document;
},
);
$operations = 0;
$processDocument = (function (Document $collection, Document $document) use (&$processDocument, $dbForProject, $database, &$operations): bool {
@@ -4585,13 +4602,9 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents')
return true;
});
$modified = $dbForProject->deleteDocuments(
'database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(),
$queries,
onNext: function (Document $document) use ($collection, &$processDocument) {
$processDocument($collection, $document);
},
);
foreach ($documents as $document) {
$processDocument($collection, $document);
}
$queueForStatsUsage
->addMetric(METRIC_DATABASES_OPERATIONS_WRITES, \max(1, $operations))
@@ -4599,8 +4612,9 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents')
$response
->dynamic(new Document([
'modified' => $modified,
]), Response::MODEL_BULK_OPERATION);
'total' => \count($documents),
'documents' => $documents,
]), Response::MODEL_DOCUMENT_LIST);
});
App::get('/v1/databases/usage')
+8 -10
View File
@@ -93,16 +93,14 @@ $eventDatabaseListener = function (Document $project, Document $document, Respon
$usageDatabaseListener = function (string $event, Document $document, StatsUsage $queueForStatsUsage) {
$value = 1;
switch ($event) {
case Database::EVENT_DOCUMENTS_CREATE:
$value = $document->getAttribute('modified', 0);
break;
case Database::EVENT_DOCUMENT_DELETE:
$value = -1;
break;
case Database::EVENT_DOCUMENTS_DELETE:
$value = -1 * $document->getAttribute('modified', 0);
break;
if ($event === Database::EVENT_DOCUMENT_DELETE) {
$value = -1;
}
if ($event === Database::EVENT_DOCUMENTS_DELETE) {
$value = -1 * $document->getAttribute('modified', 0);
} elseif ($event === Database::EVENT_DOCUMENTS_CREATE) {
$value = $document->getAttribute('modified', 0);
}
switch (true) {
-1
View File
@@ -154,7 +154,6 @@ class Response extends SwooleResponse
public const MODEL_INDEX_LIST = 'indexList';
public const MODEL_DOCUMENT = 'document';
public const MODEL_DOCUMENT_LIST = 'documentList';
public const MODEL_BULK_OPERATION = 'bulkOperation';
// Database Attributes
public const MODEL_ATTRIBUTE = 'attribute';
@@ -1,40 +0,0 @@
<?php
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
class BulkOperation extends Model
{
public function __construct()
{
$this
->addRule('modified', [
'type' => self::TYPE_INTEGER,
'description' => 'How many document were modified in this request.',
'default' => 0,
'example' => 10,
]);
}
/**
* Get Name
*
* @return string
*/
public function getName(): string
{
return 'BulkOperation';
}
/**
* Get Type
*
* @return string
*/
public function getType(): string
{
return Response::MODEL_BULK_OPERATION;
}
}