Skip to content

Commit 2c7666e

Browse files
authored
Merge pull request #9713 from ArnabChatterjee20k/feat/auto-increment
exposed internal id as a part of auto increment id
2 parents 39d45bd + 7861cb7 commit 2c7666e

File tree

2 files changed

+49
-7
lines changed

2 files changed

+49
-7
lines changed

src/Appwrite/Utopia/Response/Model/Document.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ public function __construct()
3636
'default' => '',
3737
'example' => '5e5ea5c16897e',
3838
])
39+
->addRule('$internalId', [
40+
'type' => self::TYPE_INTEGER,
41+
'description' => 'Auto increment integer.',
42+
'default' => '',
43+
'example' => '1',
44+
])
3945
->addRule('$collectionId', [
4046
'type' => self::TYPE_STRING,
4147
'description' => 'Collection ID.',
@@ -71,7 +77,6 @@ public function __construct()
7177

7278
public function filter(DatabaseDocument $document): DatabaseDocument
7379
{
74-
$document->removeAttribute('$sequence');
7580
$document->removeAttribute('$collection');
7681
$document->removeAttribute('$tenant');
7782

tests/e2e/Services/Databases/DatabasesBase.php

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1645,6 +1645,7 @@ public function testCreateDocument(array $data): array
16451645
$this->assertEquals($document1['body']['actors'][0], 'Chris Evans');
16461646
$this->assertEquals($document1['body']['actors'][1], 'Samuel Jackson');
16471647
$this->assertEquals($document1['body']['birthDay'], '1975-06-12T12:12:55.000+00:00');
1648+
$this->assertTrue(array_key_exists('$internalId', $document1['body']));
16481649

16491650
$this->assertEquals(201, $document2['headers']['status-code']);
16501651
$this->assertEquals($data['moviesId'], $document2['body']['$collectionId']);
@@ -1662,6 +1663,7 @@ public function testCreateDocument(array $data): array
16621663
$this->assertEquals($document2['body']['birthDay'], null);
16631664
$this->assertEquals($document2['body']['integers'][0], 50);
16641665
$this->assertEquals($document2['body']['integers'][1], 60);
1666+
$this->assertTrue(array_key_exists('$internalId', $document2['body']));
16651667

16661668
$this->assertEquals(201, $document3['headers']['status-code']);
16671669
$this->assertEquals($data['moviesId'], $document3['body']['$collectionId']);
@@ -1676,6 +1678,7 @@ public function testCreateDocument(array $data): array
16761678
$this->assertEquals($document3['body']['actors'][0], 'Tom Holland');
16771679
$this->assertEquals($document3['body']['actors'][1], 'Zendaya Maree Stoermer');
16781680
$this->assertEquals($document3['body']['birthDay'], '1975-06-12T18:12:55.000+00:00'); // UTC for NY
1681+
$this->assertTrue(array_key_exists('$internalId', $document3['body']));
16791682

16801683
$this->assertEquals(400, $document4['headers']['status-code']);
16811684

@@ -2003,9 +2006,9 @@ public function testListDocuments(array $data): array
20032006
$this->assertEquals(1944, $documents['body']['documents'][0]['releaseYear']);
20042007
$this->assertEquals(2017, $documents['body']['documents'][1]['releaseYear']);
20052008
$this->assertEquals(2019, $documents['body']['documents'][2]['releaseYear']);
2006-
$this->assertFalse(array_key_exists('$sequence', $documents['body']['documents'][0]));
2007-
$this->assertFalse(array_key_exists('$sequence', $documents['body']['documents'][1]));
2008-
$this->assertFalse(array_key_exists('$sequence', $documents['body']['documents'][2]));
2009+
$this->assertTrue(array_key_exists('$sequence', $documents['body']['documents'][0]));
2010+
$this->assertTrue(array_key_exists('$sequence', $documents['body']['documents'][1]));
2011+
$this->assertTrue(array_key_exists('$sequence', $documents['body']['documents'][2]));
20092012
$this->assertCount(3, $documents['body']['documents']);
20102013

20112014
foreach ($documents['body']['documents'] as $document) {
@@ -2098,7 +2101,7 @@ public function testGetDocument(array $data): void
20982101
$this->assertEquals($response['body']['releaseYear'], $document['releaseYear']);
20992102
$this->assertEquals($response['body']['$permissions'], $document['$permissions']);
21002103
$this->assertEquals($response['body']['birthDay'], $document['birthDay']);
2101-
$this->assertFalse(array_key_exists('$sequence', $response['body']));
2104+
$this->assertTrue(array_key_exists('$sequence', $response['body']));
21022105
$this->assertFalse(array_key_exists('$tenant', $response['body']));
21032106
}
21042107
}
@@ -2111,6 +2114,7 @@ public function testGetDocumentWithQueries(array $data): void
21112114
$databaseId = $data['databaseId'];
21122115
$document = $data['documents'][0];
21132116

2117+
// not selecting internal id
21142118
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $document['$collectionId'] . '/documents/' . $document['$id'], array_merge([
21152119
'content-type' => 'application/json',
21162120
'x-appwrite-project' => $this->getProject()['$id'],
@@ -2124,6 +2128,39 @@ public function testGetDocumentWithQueries(array $data): void
21242128
$this->assertEquals($document['title'], $response['body']['title']);
21252129
$this->assertEquals($document['releaseYear'], $response['body']['releaseYear']);
21262130
$this->assertArrayNotHasKey('birthDay', $response['body']);
2131+
$this->assertFalse(array_key_exists('$internalId', $response['body']));
2132+
2133+
// selecting internal id as well
2134+
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $document['$collectionId'] . '/documents/' . $document['$id'], array_merge([
2135+
'content-type' => 'application/json',
2136+
'x-appwrite-project' => $this->getProject()['$id'],
2137+
], $this->getHeaders()), [
2138+
'queries' => [
2139+
Query::select(['title', 'releaseYear', '$id','$internalId'])->toString(),
2140+
],
2141+
]);
2142+
2143+
$this->assertEquals(200, $response['headers']['status-code']);
2144+
$this->assertEquals($document['title'], $response['body']['title']);
2145+
$this->assertEquals($document['releaseYear'], $response['body']['releaseYear']);
2146+
$this->assertArrayNotHasKey('birthDay', $response['body']);
2147+
$this->assertTrue(array_key_exists('$internalId', $response['body']));
2148+
$internalId = $response['body']['$internalId'];
2149+
2150+
// Query by internalId
2151+
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $document['$collectionId'] . '/documents/' . $document['$id'], array_merge([
2152+
'content-type' => 'application/json',
2153+
'x-appwrite-project' => $this->getProject()['$id'],
2154+
], $this->getHeaders()), [
2155+
'queries' => [
2156+
Query::equal('$internalId', [$internalId])
2157+
],
2158+
]);
2159+
2160+
$this->assertEquals(200, $response['headers']['status-code']);
2161+
$this->assertEquals($document['title'], $response['body']['title']);
2162+
$this->assertEquals($document['releaseYear'], $response['body']['releaseYear']);
2163+
$this->assertTrue(array_key_exists('$internalId', $response['body']));
21272164
}
21282165

21292166
/**
@@ -4361,8 +4398,8 @@ public function testOneToOneRelationship(array $data): array
43614398

43624399
$this->assertArrayNotHasKey('$collection', $person1['body']);
43634400
$this->assertArrayNotHasKey('$collection', $person1['body']['library']);
4364-
$this->assertArrayNotHasKey('$sequence', $person1['body']);
4365-
$this->assertArrayNotHasKey('$sequence', $person1['body']['library']);
4401+
$this->assertArrayHasKey('$sequence', $person1['body']);
4402+
$this->assertArrayHasKey('$sequence', $person1['body']['library']);
43664403

43674404
$documents = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $person['body']['$id'] . '/documents', array_merge([
43684405
'content-type' => 'application/json',

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy