Add header x-appwrite-preserve-dates

This commit is contained in:
fogelito
2024-07-22 15:38:58 +03:00
parent 865d84f4e7
commit 8de8ae03f3
3 changed files with 76 additions and 23 deletions
+6 -8
View File
@@ -2743,11 +2743,16 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents')
->param('data', [], new JSON(), 'Document data as JSON object.')
->param('permissions', null, new Permissions(APP_LIMIT_ARRAY_PARAMS_SIZE, [Database::PERMISSION_READ, Database::PERMISSION_UPDATE, Database::PERMISSION_DELETE, Database::PERMISSION_WRITE]), 'An array of permissions strings. By default, only the current user is granted all permissions. [Learn more about permissions](https://appwrite.io/docs/permissions).', true)
->inject('response')
->inject('request')
->inject('dbForProject')
->inject('user')
->inject('queueForEvents')
->inject('mode')
->action(function (string $databaseId, string $documentId, string $collectionId, string|array $data, ?array $permissions, Response $response, Database $dbForProject, Document $user, Event $queueForEvents, string $mode) {
->action(function (string $databaseId, string $documentId, string $collectionId, string|array $data, ?array $permissions, Response $response, Request $request, Database $dbForProject, Document $user, Event $queueForEvents, string $mode) {
if ($request->getHeader('x-appwrite-preserve-dates') === 'true') {
$dbForProject->setPreserveDates(true);
}
$data = (\is_string($data)) ? \json_decode($data, true) : $data; // Cast to JSON array
@@ -2900,18 +2905,11 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents')
$checkPermissions($collection, $document, Database::PERMISSION_CREATE);
var_dump($document);
try {
$document = $dbForProject->createDocument('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $document);
} catch (StructureException $exception) {
throw new Exception(Exception::DOCUMENT_INVALID_STRUCTURE, $exception->getMessage());
} catch (DuplicateException $exception) {
var_dump('DuplicateException found');
var_dump($exception->getMessage());
var_dump($exception->getFile());
var_dump($exception->getLine());
var_dump("-----------------");
throw new Exception(Exception::DOCUMENT_ALREADY_EXISTS);
}
Generated
+15 -14
View File
@@ -356,16 +356,16 @@
},
{
"name": "chillerlan/php-settings-container",
"version": "2.1.5",
"version": "2.1.6",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-settings-container.git",
"reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e"
"reference": "5553558bd381fce5108c6d0343c12e488cfec6bb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/f705310389264c3578fdd9ffb15aa2cd6d91772e",
"reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e",
"url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/5553558bd381fce5108c6d0343c12e488cfec6bb",
"reference": "5553558bd381fce5108c6d0343c12e488cfec6bb",
"shasum": ""
},
"require": {
@@ -373,15 +373,16 @@
"php": "^7.4 || ^8.0"
},
"require-dev": {
"phan/phan": "^5.4",
"phpcsstandards/php_codesniffer": "^3.8",
"phpmd/phpmd": "^2.13",
"phpunit/phpunit": "^9.6"
"phpmd/phpmd": "^2.15",
"phpstan/phpstan": "^1.11",
"phpstan/phpstan-deprecation-rules": "^1.2",
"phpunit/phpunit": "^9.6",
"squizlabs/php_codesniffer": "^3.10"
},
"type": "library",
"autoload": {
"psr-4": {
"chillerlan\\Settings\\": "src/"
"chillerlan\\Settings\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -418,7 +419,7 @@
"type": "ko_fi"
}
],
"time": "2024-01-05T23:20:55+00:00"
"time": "2024-07-17T01:04:28+00:00"
},
{
"name": "dragonmantank/cron-expression",
@@ -2175,12 +2176,12 @@
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
"reference": "a7dc26f65866d022451a17860d50e29123edd7e4"
"reference": "d63024ce593124a5ec47f9606386bc01ba27424c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/a7dc26f65866d022451a17860d50e29123edd7e4",
"reference": "a7dc26f65866d022451a17860d50e29123edd7e4",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/d63024ce593124a5ec47f9606386bc01ba27424c",
"reference": "d63024ce593124a5ec47f9606386bc01ba27424c",
"shasum": ""
},
"require": {
@@ -2222,7 +2223,7 @@
"issues": "https://github.com/utopia-php/migration/issues",
"source": "https://github.com/utopia-php/migration/tree/backups"
},
"time": "2024-07-15T11:52:33+00:00"
"time": "2024-07-21T12:03:39+00:00"
},
{
"name": "utopia-php/mongo",
+55 -1
View File
@@ -4754,6 +4754,8 @@ trait DatabasesBase
$this->assertEquals($longtext['headers']['status-code'], 202);
$longtext = file_get_contents(__DIR__ . '/../../../resources/longtext.txt');
for ($i = 0; $i < 1; $i++) {
$this->client->call(Client::METHOD_POST, '/databases/' . $data['databaseId'] . '/collections/' . $data['$id'] . '/documents', array_merge([
'content-type' => 'application/json',
@@ -4761,7 +4763,7 @@ trait DatabasesBase
], $this->getHeaders()), [
'documentId' => ID::unique(),
'data' => [
'longtext' => file_get_contents(__DIR__ . '/../../../resources/longtext.txt'),
'longtext' => $longtext . $longtext,
],
'permissions' => [
Permission::read(Role::user($this->getUser()['$id'])),
@@ -4783,4 +4785,56 @@ trait DatabasesBase
$this->assertEquals(408, $response['headers']['status-code']);
}
/**
* @depends testCreateDatabase
*/
public function testPreserveDates(array $data): void
{
$databaseId = $data['databaseId'];
$collection = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
'x-appwrite-key' => $this->getProject()['apiKey'],
]), [
'collectionId' => 'preserve_dates',
'name' => 'Preserve Dates',
'documentSecurity' => true,
'permissions' => [
Permission::create(Role::user($this->getUser()['$id'])),
],
]);
$this->assertEquals(201, $collection['headers']['status-code']);
$response = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $collection['body']['$id'] . '/documents', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
'x-appwrite-preserve-dates' => 'true'
], $this->getHeaders()), [
'documentId' => ID::unique(),
'data' => [
'$createdAt' => '2000-01-01 01:01:01',
'$updatedAt' => '2020-01-01 01:01:01',
],
'permissions' => [
Permission::read(Role::user($this->getUser()['$id'])),
]
]);
$this->assertEquals(201, $response['headers']['status-code']);
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $collection['body']['$id'] . '/documents', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'queries' => [
Query::equal('$id', [$response['body']['$id']])->toString(),
],
]);
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertEquals('2000-01-01T01:01:01.000+00:00', $response['body']['documents'][0]['$createdAt']);
$this->assertEquals('2020-01-01T01:01:01.000+00:00', $response['body']['documents'][0]['$updatedAt']);
}
}