Skip to content

Commit 3df89e6

Browse files
Merge pull request appwrite#3816 from appwrite/feat-consistent-parent-id
Update document model
2 parents 90af882 + 908ba51 commit 3df89e6

File tree

8 files changed

+88
-53
lines changed

8 files changed

+88
-53
lines changed

app/controllers/api/databases.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1941,7 +1941,8 @@ function createAttribute(string $databaseId, string $collectionId, Document $att
19411941

19421942
try {
19431943
$document = $dbForProject->createDocument('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), new Document($data));
1944-
$document->setAttribute('$collection', $collectionId);
1944+
$document->setAttribute('$collectionId', $collectionId);
1945+
$document->setAttribute('$databaseId', $databaseId);
19451946
} catch (StructureException $exception) {
19461947
throw new Exception(Exception::DOCUMENT_INVALID_STRUCTURE, $exception->getMessage());
19471948
} catch (DuplicateException $exception) {
@@ -2046,7 +2047,11 @@ function createAttribute(string $databaseId, string $collectionId, Document $att
20462047
/**
20472048
* Reset $collection attribute to remove prefix.
20482049
*/
2049-
$documents = array_map(fn(Document $document) => $document->setAttribute('$collection', $collectionId), $documents);
2050+
$documents = array_map(function (Document $document) use ($collectionId, $databaseId) {
2051+
$document->setAttribute('$collectionId', $collectionId);
2052+
$document->setAttribute('$databaseId', $databaseId);
2053+
return $document;
2054+
}, $documents);
20502055

20512056
$response->dynamic(new Document([
20522057
'total' => $total,
@@ -2110,7 +2115,8 @@ function createAttribute(string $databaseId, string $collectionId, Document $att
21102115
/**
21112116
* Reset $collection attribute to remove prefix.
21122117
*/
2113-
$document->setAttribute('$collection', $collectionId);
2118+
$document->setAttribute('$collectionId', $collectionId);
2119+
$document->setAttribute('$databaseId', $databaseId);
21142120

21152121
$response->dynamic($document, Response::MODEL_DOCUMENT);
21162122
});
@@ -2329,7 +2335,8 @@ function createAttribute(string $databaseId, string $collectionId, Document $att
23292335
/**
23302336
* Reset $collection attribute to remove prefix.
23312337
*/
2332-
$document->setAttribute('$collection', $collectionId);
2338+
$document->setAttribute('$collectionId', $collectionId);
2339+
$document->setAttribute('$databaseId', $databaseId);
23332340
} catch (AuthorizationException) {
23342341
throw new Exception(Exception::USER_UNAUTHORIZED);
23352342
} catch (DuplicateException) {
@@ -2421,7 +2428,8 @@ function createAttribute(string $databaseId, string $collectionId, Document $att
24212428
/**
24222429
* Reset $collection attribute to remove prefix.
24232430
*/
2424-
$document->setAttribute('$collection', $collectionId);
2431+
$document->setAttribute('$collectionId', $collectionId);
2432+
$document->setAttribute('$databaseId', $databaseId);
24252433

24262434
$deletes
24272435
->setType(DELETE_TYPE_AUDIT)

app/controllers/web/console.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -325,17 +325,17 @@
325325
->label('permission', 'public')
326326
->label('scope', 'console')
327327
->param('databaseId', '', new UID(), 'Database unique ID.')
328-
->param('collection', '', new UID(), 'Collection unique ID.')
328+
->param('collectionId', '', new UID(), 'Collection unique ID.')
329329
->inject('layout')
330-
->action(function (string $databaseId, string $collection, View $layout) {
330+
->action(function (string $databaseId, string $collectionId, View $layout) {
331331

332332
$logs = new View(__DIR__ . '/../../views/console/comps/logs.phtml');
333333
$logs
334334
->setParam('interval', App::getEnv('_APP_MAINTENANCE_RETENTION_AUDIT', 0))
335335
->setParam('method', 'databases.listDocumentLogs')
336336
->setParam('params', [
337337
'database-id' => '{{router.params.databaseId}}',
338-
'collection-id' => '{{router.params.collection}}',
338+
'collection-id' => '{{router.params.collectionId}}',
339339
'document-id' => '{{router.params.id}}',
340340
])
341341
;
@@ -352,7 +352,7 @@
352352
Database::PERMISSION_DELETE,
353353
])
354354
->setParam('params', [
355-
'collection-id' => '{{router.params.collection}}',
355+
'collection-id' => '{{router.params.collectionId}}',
356356
'database-id' => '{{router.params.databaseId}}',
357357
'document-id' => '{{router.params.id}}',
358358
]);
@@ -362,7 +362,7 @@
362362
$page
363363
->setParam('new', false)
364364
->setParam('database', $databaseId)
365-
->setParam('collection', $collection)
365+
->setParam('collection', $collectionId)
366366
->setParam('permissions', $permissions)
367367
->setParam('logs', $logs)
368368
;
@@ -377,9 +377,9 @@
377377
->label('permission', 'public')
378378
->label('scope', 'console')
379379
->param('databaseId', '', new UID(), 'Database unique ID.')
380-
->param('collection', '', new UID(), 'Collection unique ID.')
380+
->param('collectionId', '', new UID(), 'Collection unique ID.')
381381
->inject('layout')
382-
->action(function (string $databaseId, string $collection, View $layout) {
382+
->action(function (string $databaseId, string $collectionId, View $layout) {
383383

384384
$permissions = new View(__DIR__ . '/../../views/console/comps/permissions-matrix.phtml');
385385

@@ -392,7 +392,7 @@
392392
Database::PERMISSION_DELETE,
393393
])
394394
->setParam('params', [
395-
'collection-id' => '{{router.params.collection}}',
395+
'collection-id' => '{{router.params.collectionId}}',
396396
'database-id' => '{{router.params.databaseId}}',
397397
'document-id' => '{{router.params.id}}',
398398
]);
@@ -402,7 +402,7 @@
402402
$page
403403
->setParam('new', true)
404404
->setParam('database', $databaseId)
405-
->setParam('collection', $collection)
405+
->setParam('collection', $collectionId)
406406
->setParam('permissions', $permissions)
407407
->setParam('logs', new View())
408408
;

app/views/console/databases/collection.phtml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ $permissions = $this->getParam('permissions', null);
8989
<template x-for="doc in documents">
9090
<tr>
9191
<td data-title="$id: ">
92-
<a :href="`/console/databases/document?id=${doc.$id}&collection=${doc.$collection}&databaseId=${databaseId}&project=${project}`" x-text="doc.$id"></a>
92+
<a :href="`/console/databases/document?id=${doc.$id}&collectionId=${doc.$collectionId}&databaseId=${databaseId}&project=${project}`" x-text="doc.$id"></a>
9393
</td>
9494
<template x-for="attr in attributes">
9595
<td x-show="attr.status === 'available'" :data-title="attr.key + ':'">
96-
<a :href="`/console/databases/document?id=${doc.$id}&collection=${doc.$collection}&databaseId=${databaseId}&project=${project}`">
96+
<a :href="`/console/databases/document?id=${doc.$id}&collectionId=${doc.$collectionId}&databaseId=${databaseId}&project=${project}`">
9797
<span x-text="doc[attr.key] ?? 'n/a'"></span>
9898
</a>
9999
</td>
@@ -136,7 +136,7 @@ $permissions = $this->getParam('permissions', null);
136136
</form>
137137
</div>
138138

139-
<a data-ls-if="0 < {{project-collection.attributes.length}}" data-ls-attrs="href=/console/databases/document/new?collection={{router.params.id}}&databaseId={{router.params.databaseId}}&project={{router.params.project}}" class="button">
139+
<a data-ls-if="0 < {{project-collection.attributes.length}}" data-ls-attrs="href=/console/databases/document/new?collectionId={{router.params.id}}&databaseId={{router.params.databaseId}}&project={{router.params.project}}" class="button">
140140
Add Document
141141
</a>
142142
<a data-ls-if="!{{project-collection.attributes.length}}" data-ls-attrs="href=/console/databases/collection/attributes?id={{router.params.id}}&databaseId={{router.params.databaseId}}&project={{router.params.project}}" class="button">

app/views/console/databases/document.phtml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ $permissions = $this->getParam('permissions', null);
77
?>
88
<div
99
data-service="databases.getCollection"
10-
data-param-collection-id="{{router.params.collection}}"
10+
data-param-collection-id="{{router.params.collectionId}}"
1111
data-param-database-id="{{router.params.databaseId}}"
1212
data-scope="sdk"
1313
data-event="load,databases.updateDocument"
1414
data-name="project-collection">
1515

1616
<div
1717
data-service="databases.getDocument"
18-
data-param-collection-id="{{router.params.collection}}"
18+
data-param-collection-id="{{router.params.collectionId}}"
1919
data-param-database-id="{{router.params.databaseId}}"
2020
data-param-document-id="{{router.params.id}}"
2121
data-scope="sdk"
@@ -25,7 +25,7 @@ $permissions = $this->getParam('permissions', null);
2525

2626
<div class="cover">
2727
<h1 class="zone xl margin-bottom-large">
28-
<a data-ls-attrs="href=/console/databases/collection?id={{router.params.collection}}&databaseId={{router.params.databaseId}}&project={{router.params.project}}" class="back text-size-small link-return-animation--start"><i class="icon-left-open"></i> <span data-ls-bind="{{project-collection.name}}"></span></a>
28+
<a data-ls-attrs="href=/console/databases/collection?id={{router.params.collectionId}}&databaseId={{router.params.databaseId}}&project={{router.params.project}}" class="back text-size-small link-return-animation--start"><i class="icon-left-open"></i> <span data-ls-bind="{{project-collection.name}}"></span></a>
2929

3030
<br />
3131

@@ -48,7 +48,7 @@ $permissions = $this->getParam('permissions', null);
4848

4949
<div class="zone xl margin-bottom-no">
5050
<ul class="phases clear" data-ui-phases data-selected="{{router.params.tab}}">
51-
<li data-state="/console/databases/document?id={{router.params.id}}&collection={{router.params.collection}}&databaseId={{router.params.databaseId}}&project={{router.params.project}}">
51+
<li data-state="/console/databases/document?id={{router.params.id}}&collectionId={{router.params.collectionId}}&databaseId={{router.params.databaseId}}&project={{router.params.project}}">
5252
<h2 class="margin-bottom">Overview</h2>
5353

5454
<div class="row responsive">
@@ -362,7 +362,7 @@ $permissions = $this->getParam('permissions', null);
362362

363363
<label>Collection ID</label>
364364
<div class="input-copy margin-bottom">
365-
<input type="text" autocomplete="off" placeholder="" data-ls-bind="{{router.params.collection}}" disabled data-forms-copy class="margin-bottom-no" />
365+
<input type="text" autocomplete="off" placeholder="" data-ls-bind="{{router.params.collectionId}}" disabled data-forms-copy class="margin-bottom-no" />
366366
</div>
367367

368368
<label>Database ID</label>
@@ -395,13 +395,13 @@ $permissions = $this->getParam('permissions', null);
395395
data-service="databases.deleteDocument"
396396
data-event="submit"
397397
data-param-database-id="{{router.params.databaseId}}"
398-
data-param-collection-id="{{router.params.collection}}"
398+
data-param-collection-id="{{router.params.collectionId}}"
399399
data-param-document-id="{{project-document.$id}}"
400400
data-confirm="Are you sure you want to delete this document?"
401401
data-success="alert,trigger,redirect"
402402
data-success-param-alert-text="Document deleted successfully"
403403
data-success-param-trigger-events="databases.deleteDocument"
404-
data-success-param-redirect-url="/console/databases/collection?id={{router.params.collection}}&project={{router.params.project}}&databaseId={{router.params.databaseId}}"
404+
data-success-param-redirect-url="/console/databases/collection?id={{router.params.collectionId}}&project={{router.params.project}}&databaseId={{router.params.databaseId}}"
405405
data-failure="alert"
406406
data-failure-param-alert-text="Failed to delete collection"
407407
data-failure-param-alert-classname="error">
@@ -413,7 +413,7 @@ $permissions = $this->getParam('permissions', null);
413413
</div>
414414
</li>
415415
<?php if(!$new): ?>
416-
<li data-state="/console/databases/document/activity?id={{router.params.id}}&collection={{router.params.collection}}&project={{router.params.project}}&databaseId={{router.params.databaseId}}">
416+
<li data-state="/console/databases/document/activity?id={{router.params.id}}&collectionId={{router.params.collectionId}}&project={{router.params.project}}&databaseId={{router.params.databaseId}}">
417417
<h2>Activity</h2>
418418

419419
<?php echo $logs->render(); ?>

app/views/console/databases/form.phtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ $array = $this->getParam('array', false);
1515

1616
<?php if($parent): ?>
1717
<input name="documentId" type="hidden" data-ls-bind="{{router.params.id}}" />
18-
<input name="collectionId" type="hidden" data-ls-bind="{{router.params.collection}}" />
18+
<input name="collectionId" type="hidden" data-ls-bind="{{router.params.collectionId}}" />
1919
<?php else: ?>
2020
<?php /*<div class="margin-bottom-small text-size-small" data-ls-if="({{<?php echo $this->escape($namespace); ?>.$id}})">
2121
<span data-ls-bind="Document #{{<?php echo $this->escape($namespace); ?>.$id}}"></span> &nbsp;

src/Appwrite/Messaging/Adapter/Realtime.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,8 @@ public static function fromPayload(string $event, Document $payload, Document $p
286286
}
287287

288288
$channels[] = 'documents';
289-
$channels[] = 'databases.' . $database->getId() . '.collections.' . $payload->getCollection() . '.documents';
290-
$channels[] = 'databases.' . $database->getId() . '.collections.' . $payload->getCollection() . '.documents.' . $payload->getId();
289+
$channels[] = 'databases.' . $database->getId() . '.collections.' . $payload->getAttribute('$collectionId') . '.documents';
290+
$channels[] = 'databases.' . $database->getId() . '.collections.' . $payload->getAttribute('$collectionId') . '.documents.' . $payload->getId();
291291

292292
$roles = $collection->getAttribute('documentSecurity', false)
293293
? \array_merge($collection->getRead(), $payload->getRead())

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,18 @@ public function __construct()
3636
'default' => '',
3737
'example' => '5e5ea5c16897e',
3838
])
39-
->addRule('$collection', [
39+
->addRule('$collectionId', [
4040
'type' => self::TYPE_STRING,
4141
'description' => 'Collection ID.',
4242
'default' => '',
4343
'example' => '5e5ea5c15117e',
4444
])
45+
->addRule('$databaseId', [
46+
'type' => self::TYPE_STRING,
47+
'description' => 'Database ID.',
48+
'default' => '',
49+
'example' => '5e5ea5c15117e',
50+
])
4551
->addRule('$createdAt', [
4652
'type' => self::TYPE_DATETIME,
4753
'description' => 'Document creation date in ISO 8601 format.',
@@ -60,13 +66,13 @@ public function __construct()
6066
'default' => '',
6167
'example' => ['read("any")'],
6268
'array' => true,
63-
])
64-
;
69+
]);
6570
}
6671

6772
public function filter(DatabaseDocument $document): DatabaseDocument
6873
{
6974
$document->removeAttribute('$internalId');
75+
$document->removeAttribute('$collection'); // $collection is the internal collection ID
7076

7177
return $document;
7278
}

0 commit comments

Comments
 (0)