diff --git a/src/Database/Database.php b/src/Database/Database.php index ad7210cdf..c43109220 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -4101,8 +4101,8 @@ public function updateDocument(string $collection, string $id, Document $documen } $collection = $this->silent(fn () => $this->getCollection($collection)); - - $document = $this->withTransaction(function () use ($collection, $id, $document) { + $newUpdatedAt = $document->getUpdatedAt(); + $document = $this->withTransaction(function () use ($collection, $id, $document, $newUpdatedAt) { $time = DateTime::now(); $old = Authorization::skip(fn () => $this->silent( fn () => $this->getDocument($collection->getId(), $id, forUpdate: true) @@ -4251,8 +4251,7 @@ public function updateDocument(string $collection, string $id, Document $documen } if ($shouldUpdate) { - $updatedAt = $document->getUpdatedAt(); - $document->setAttribute('$updatedAt', ($updatedAt === null || !$this->preserveDates) ? $time : $updatedAt); + $document->setAttribute('$updatedAt', ($newUpdatedAt === null || !$this->preserveDates) ? $time : $newUpdatedAt); } // Check if document was updated after the request timestamp diff --git a/tests/e2e/Adapter/Scopes/DocumentTests.php b/tests/e2e/Adapter/Scopes/DocumentTests.php index 1d5208df9..85ab0488d 100644 --- a/tests/e2e/Adapter/Scopes/DocumentTests.php +++ b/tests/e2e/Adapter/Scopes/DocumentTests.php @@ -4834,6 +4834,23 @@ public function testSingleDocumentDateOperations(): void $this->assertNotEquals($customDate, $updatedDoc7->getAttribute('$createdAt')); $this->assertNotEquals($customDate, $updatedDoc7->getAttribute('$updatedAt')); + // Test checking updatedAt updates even old document exists + $database->setPreserveDates(true); + $doc11 = $database->createDocument($collection, new Document([ + '$id' => 'doc11', + '$permissions' => [Permission::read(Role::any()), Permission::write(Role::any()),Permission::update(Role::any())], + 'string' => 'no_dates', + '$createdAt' => $customDate + ])); + + $newUpdatedAt = $doc11->getUpdatedAt(); + + $newDoc11 = new Document([ + 'string' => 'no_dates_update', + ]); + $updatedDoc7 = $database->updateDocument($collection, 'doc11', $newDoc11); + $this->assertNotEquals($newUpdatedAt, $updatedDoc7->getAttribute('$updatedAt')); + $database->setPreserveDates(false); $database->deleteCollection($collection); }