From 38d0536b8d5554aabf696b35bb761b5b79ce27e1 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Mon, 22 Dec 2025 15:30:05 +0530 Subject: [PATCH] Write to new resource attributes in `keys` --- app/controllers/api/projects.php | 27 ++++++++++++++++--- app/init/database/filters.php | 8 +++++- src/Appwrite/Platform/Workers/Deletes.php | 8 +++++- .../Platform/Workers/StatsResources.php | 8 +++++- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index c4d703d744..eba6d8d3a4 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -1499,6 +1499,9 @@ App::post('/v1/projects/:projectId/keys') ], 'projectInternalId' => $project->getSequence(), 'projectId' => $project->getId(), + 'resourceInternalId' => $project->getSequence(), + 'resourceId' => $project->getId(), + 'resourceType' => 'projects', 'name' => $name, 'scopes' => $scopes, 'expire' => $expire, @@ -1587,7 +1590,13 @@ App::get('/v1/projects/:projectId/keys/:keyId') $key = $dbForPlatform->findOne('keys', [ Query::equal('$id', [$keyId]), - Query::equal('projectInternalId', [$project->getSequence()]), + Query::or([ + Query::equal('projectInternalId', [$project->getSequence()]), + Query::and([ + Query::equal('resourceType', ['projects']), + Query::equal('resourceInternalId', [$project->getSequence()]), + ]) + ]) ]); if ($key->isEmpty()) { @@ -1631,7 +1640,13 @@ App::put('/v1/projects/:projectId/keys/:keyId') $key = $dbForPlatform->findOne('keys', [ Query::equal('$id', [$keyId]), - Query::equal('projectInternalId', [$project->getSequence()]), + Query::or([ + Query::equal('projectInternalId', [$project->getSequence()]), + Query::and([ + Query::equal('resourceType', ['projects']), + Query::equal('resourceInternalId', [$project->getSequence()]), + ]) + ]) ]); if ($key->isEmpty()) { @@ -1682,7 +1697,13 @@ App::delete('/v1/projects/:projectId/keys/:keyId') $key = $dbForPlatform->findOne('keys', [ Query::equal('$id', [$keyId]), - Query::equal('projectInternalId', [$project->getSequence()]), + Query::or([ + Query::equal('projectInternalId', [$project->getSequence()]), + Query::and([ + Query::equal('resourceType', ['projects']), + Query::equal('resourceInternalId', [$project->getSequence()]), + ]) + ]) ]); if ($key->isEmpty()) { diff --git a/app/init/database/filters.php b/app/init/database/filters.php index c4cfd1ac81..49c13c9a0b 100644 --- a/app/init/database/filters.php +++ b/app/init/database/filters.php @@ -136,7 +136,13 @@ Database::addFilter( function (mixed $value, Document $document, Database $database) { return $database ->find('keys', [ - Query::equal('projectInternalId', [$document->getSequence()]), + Query::or([ + Query::equal('projectInternalId', [$document->getSequence()]), + Query::and([ + Query::equal('resourceType', ['projects']), + Query::equal('resourceInternalId', [$document->getSequence()]), + ]) + ]), Query::limit(APP_LIMIT_SUBQUERY), ]); } diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php index 5729bdc2c7..dfd9aebbf5 100644 --- a/src/Appwrite/Platform/Workers/Deletes.php +++ b/src/Appwrite/Platform/Workers/Deletes.php @@ -565,7 +565,13 @@ class Deletes extends Action // Delete Keys $this->deleteByGroup('keys', [ - Query::equal('projectInternalId', [$projectInternalId]), + Query::or([ + Query::equal('projectInternalId', [$projectInternalId]), + Query::and([ + Query::equal('resourceType', ['projects']), + Query::equal('resourceInternalId', [$projectInternalId]), + ]) + ]), Query::orderAsc() ], $dbForPlatform); diff --git a/src/Appwrite/Platform/Workers/StatsResources.php b/src/Appwrite/Platform/Workers/StatsResources.php index 1ef348091a..bf0ddae379 100644 --- a/src/Appwrite/Platform/Workers/StatsResources.php +++ b/src/Appwrite/Platform/Workers/StatsResources.php @@ -111,7 +111,13 @@ class StatsResources extends Action Query::equal('projectInternalId', [$project->getSequence()]) ]); $keys = $dbForPlatform->count('keys', [ - Query::equal('projectInternalId', [$project->getSequence()]) + Query::or([ + Query::equal('projectInternalId', [$project->getSequence()]), + Query::and([ + Query::equal('resourceType', ['projects']), + Query::equal('resourceInternalId', [$project->getSequence()]), + ]) + ]), ]); $domains = $dbForPlatform->count('rules', [