mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Revert "Don't accumulate docs on update/delete"
This reverts commit 8c1b9044b3.
# Conflicts:
# app/controllers/api/databases.php
This commit is contained in:
@@ -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')
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user