From 64630490a551114bb241c7cde44dd6a533a13466 Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:36:31 +0530 Subject: [PATCH 1/5] Delete linked VCS repos and comments on function deletion --- src/Appwrite/Platform/Workers/Deletes.php | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php index 2130499257..1a2b378590 100644 --- a/src/Appwrite/Platform/Workers/Deletes.php +++ b/src/Appwrite/Platform/Workers/Deletes.php @@ -45,7 +45,7 @@ class Deletes extends Action ->inject('getFunctionsDevice') ->inject('getBuildsDevice') ->inject('getCacheDevice') - ->callback(fn($message, $dbForConsole, callable $getProjectDB, callable $getFilesDevice, callable $getFunctionsDevice, callable $getBuildsDevice, callable $getCacheDevice) => $this->action($message, $dbForConsole, $getProjectDB, $getFilesDevice, $getFunctionsDevice, $getBuildsDevice, $getCacheDevice)); + ->callback(fn ($message, $dbForConsole, callable $getProjectDB, callable $getFilesDevice, callable $getFunctionsDevice, callable $getBuildsDevice, callable $getCacheDevice) => $this->action($message, $dbForConsole, $getProjectDB, $getFilesDevice, $getFunctionsDevice, $getBuildsDevice, $getCacheDevice)); } /** @@ -688,7 +688,7 @@ class Deletes extends Action $this->deleteDeploymentFiles($functionsStorage, $document); }); - /** + /** * Delete builds */ Console::info("Deleting builds for function " . $functionId); @@ -709,6 +709,22 @@ class Deletes extends Action Query::equal('functionInternalId', [$functionInternalId]) ], $dbForProject); + /** + * Delete VCS Repositories and VCS Comments + */ + Console::info("Deleting VCS repositories and comments linked to function " . $functionId); + $this->deleteByGroup('repositories', [ + Query::equal('resourceInternalId', [$functionInternalId]), + Query::equal('resourceType', ['function']), + ], $dbForConsole, function (Document $document) use ($dbForConsole) { + $providerRepositoryId = $document->getAttribute('providerRepositoryId', ''); + $projectId = $document->getAttribute('projectId', ''); + $this->deleteByGroup('vcsComments', [ + Query::equal('providerRepositoryId', [$providerRepositoryId]), + Query::equal('projectId', [$projectId]), + ], $dbForConsole); + }); + /** * Request executor to delete all deployment containers */ From d95e4790a0834b9d2e504c8d8adc1f2253c525ae Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Wed, 1 Nov 2023 15:06:28 +0530 Subject: [PATCH 2/5] Delete VCS documents when project is deleted --- src/Appwrite/Platform/Workers/Deletes.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php index 1a2b378590..048a7c81ec 100644 --- a/src/Appwrite/Platform/Workers/Deletes.php +++ b/src/Appwrite/Platform/Workers/Deletes.php @@ -450,6 +450,23 @@ class Deletes extends Action Query::equal('projectInternalId', [$projectInternalId]) ], $dbForConsole); + // Delete VCS Installations, Repositories and Comments + $this->deleteByGroup('installations', [ + Query::equal('projectInternalId', [$projectInternalId]) + ], $dbForConsole, function (Document $document) use ($dbForConsole) { + $projectInternalId = $document->getAttribute('projectInternalId', ''); + $this->deleteByGroup('repositories', [ + Query::equal('installationInternalId', [$projectInternalId]), + ], $dbForConsole, function (Document $document) use ($dbForConsole) { + $providerRepositoryId = $document->getAttribute('providerRepositoryId', ''); + $projectId = $document->getAttribute('projectId', ''); + $this->deleteByGroup('vcsComments', [ + Query::equal('providerRepositoryId', [$providerRepositoryId]), + Query::equal('projectId', [$projectId]), + ], $dbForConsole); + }); + }); + // Delete metadata tables try { $dbForProject->deleteCollection('_metadata'); From 9be32184d6d187d637bd2061e124eb2ad1833d6d Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Fri, 3 Nov 2023 14:54:51 +0530 Subject: [PATCH 3/5] Refactor loop --- src/Appwrite/Platform/Workers/Deletes.php | 24 +++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php index 048a7c81ec..5369419ff5 100644 --- a/src/Appwrite/Platform/Workers/Deletes.php +++ b/src/Appwrite/Platform/Workers/Deletes.php @@ -450,21 +450,21 @@ class Deletes extends Action Query::equal('projectInternalId', [$projectInternalId]) ], $dbForConsole); - // Delete VCS Installations, Repositories and Comments + // Delete VCS Installations $this->deleteByGroup('installations', [ Query::equal('projectInternalId', [$projectInternalId]) + ], $dbForConsole); + + // Delete VCS Repositories and Comments + $this->deleteByGroup('repositories', [ + Query::equal('installationInternalId', [$projectInternalId]), ], $dbForConsole, function (Document $document) use ($dbForConsole) { - $projectInternalId = $document->getAttribute('projectInternalId', ''); - $this->deleteByGroup('repositories', [ - Query::equal('installationInternalId', [$projectInternalId]), - ], $dbForConsole, function (Document $document) use ($dbForConsole) { - $providerRepositoryId = $document->getAttribute('providerRepositoryId', ''); - $projectId = $document->getAttribute('projectId', ''); - $this->deleteByGroup('vcsComments', [ - Query::equal('providerRepositoryId', [$providerRepositoryId]), - Query::equal('projectId', [$projectId]), - ], $dbForConsole); - }); + $providerRepositoryId = $document->getAttribute('providerRepositoryId', ''); + $projectId = $document->getAttribute('projectId', ''); + $this->deleteByGroup('vcsComments', [ + Query::equal('providerRepositoryId', [$providerRepositoryId]), + Query::equal('projectId', [$projectId]), + ], $dbForConsole); }); // Delete metadata tables From 4a3b8fb70e8a3b80c41b33900695fb981e17e902 Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Fri, 3 Nov 2023 15:32:50 +0530 Subject: [PATCH 4/5] Change projectId to projectInternalId --- src/Appwrite/Platform/Workers/Deletes.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php index 5369419ff5..7a22128854 100644 --- a/src/Appwrite/Platform/Workers/Deletes.php +++ b/src/Appwrite/Platform/Workers/Deletes.php @@ -457,13 +457,13 @@ class Deletes extends Action // Delete VCS Repositories and Comments $this->deleteByGroup('repositories', [ - Query::equal('installationInternalId', [$projectInternalId]), + Query::equal('projectInternalId', [$projectInternalId]), ], $dbForConsole, function (Document $document) use ($dbForConsole) { $providerRepositoryId = $document->getAttribute('providerRepositoryId', ''); - $projectId = $document->getAttribute('projectId', ''); + $projectInternalId = $document->getAttribute('projectInternalId', ''); $this->deleteByGroup('vcsComments', [ Query::equal('providerRepositoryId', [$providerRepositoryId]), - Query::equal('projectId', [$projectId]), + Query::equal('projectInternalId', [$projectInternalId]), ], $dbForConsole); }); From 2bf247053d8f71de336e2fa152db0fa411dd771d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=B7=E5=8D=8E=20=E5=88=98?= Date: Wed, 8 Nov 2023 21:59:29 +0000 Subject: [PATCH 5/5] chore: address review comments --- src/Appwrite/Platform/Workers/Deletes.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php index 7a22128854..269dc61e3c 100644 --- a/src/Appwrite/Platform/Workers/Deletes.php +++ b/src/Appwrite/Platform/Workers/Deletes.php @@ -455,17 +455,15 @@ class Deletes extends Action Query::equal('projectInternalId', [$projectInternalId]) ], $dbForConsole); - // Delete VCS Repositories and Comments + // Delete VCS Repositories $this->deleteByGroup('repositories', [ Query::equal('projectInternalId', [$projectInternalId]), - ], $dbForConsole, function (Document $document) use ($dbForConsole) { - $providerRepositoryId = $document->getAttribute('providerRepositoryId', ''); - $projectInternalId = $document->getAttribute('projectInternalId', ''); - $this->deleteByGroup('vcsComments', [ - Query::equal('providerRepositoryId', [$providerRepositoryId]), - Query::equal('projectInternalId', [$projectInternalId]), - ], $dbForConsole); - }); + ], $dbForConsole); + + // Delete VCS commments + $this->deleteByGroup('vcsComments', [ + Query::equal('projectInternalId', [$projectInternalId]), + ], $dbForConsole); // Delete metadata tables try {