diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 572b6f02a8..664e9a658b 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -255,18 +255,6 @@ App::delete('/v1/teams/:teamId') throw new Exception(Exception::TEAM_NOT_FOUND); } - $memberships = $dbForProject->find('memberships', [ - Query::equal('teamId', [$teamId]), - Query::limit(2000), // TODO fix members limit - ]); - - // TODO delete all members individually from the user object - foreach ($memberships as $membership) { - if (!$dbForProject->deleteDocument('memberships', $membership->getId())) { - throw new Exception(Exception::GENERAL_SERVER_ERROR, 'Failed to remove membership for team from DB'); - } - } - if (!$dbForProject->deleteDocument('teams', $teamId)) { throw new Exception(Exception::GENERAL_SERVER_ERROR, 'Failed to remove team from DB'); } diff --git a/app/workers/deletes.php b/app/workers/deletes.php index 1e31fc270f..55ab302bd9 100644 --- a/app/workers/deletes.php +++ b/app/workers/deletes.php @@ -8,7 +8,6 @@ use Utopia\Database\Database; use Utopia\Database\Document; use Utopia\Database\Query; use Appwrite\Resque\Worker; -use Executor\Executor; use Utopia\Storage\Device\Local; use Utopia\Abuse\Abuse; use Utopia\Abuse\Adapters\TimeLimit; @@ -256,6 +255,7 @@ class DeletesV1 extends Worker protected function deleteCollection(Document $document, Document $project): void { $collectionId = $document->getId(); + $collectionInternalId = $document->getInternalId(); $databaseId = $document->getAttribute('databaseId'); $databaseInternalId = $document->getAttribute('databaseInternalId'); @@ -264,13 +264,13 @@ class DeletesV1 extends Worker $dbForProject->deleteCollection('database_' . $databaseInternalId . '_collection_' . $document->getInternalId()); $this->deleteByGroup('attributes', [ - Query::equal('databaseId', [$databaseId]), - Query::equal('collectionId', [$collectionId]) + Query::equal('databaseInternalId', [$databaseInternalId]), + Query::equal('collectionInternalId', [$collectionInternalId]) ], $dbForProject); $this->deleteByGroup('indexes', [ - Query::equal('databaseId', [$databaseId]), - Query::equal('collectionId', [$collectionId]) + Query::equal('databaseInternalId', [$databaseInternalId]), + Query::equal('collectionInternalId', [$collectionInternalId]) ], $dbForProject); $this->deleteAuditLogsByResource('database/' . $databaseId . '/collection/' . $collectionId, $project); @@ -297,12 +297,21 @@ class DeletesV1 extends Worker */ protected function deleteMemberships(Document $document, Document $project): void { - $teamId = $document->getAttribute('teamId', ''); + $dbForProject = $this->getProjectDB($project); + $teamInternalId = $document->getInternalId(); // Delete Memberships - $this->deleteByGroup('memberships', [ - Query::equal('teamId', [$teamId]) - ], $this->getProjectDB($project)); + $this->deleteByGroup( + 'memberships', + [ + Query::equal('teamInternalId', [$teamInternalId]) + ], + $dbForProject, + function (Document $membership) use ($dbForProject) { + $userId = $membership->getAttribute('userId'); + $dbForProject->deleteCachedDocument('users', $userId); + } + ); } /** @@ -330,19 +339,20 @@ class DeletesV1 extends Worker protected function deleteUser(Document $document, Document $project): void { $userId = $document->getId(); + $userInternalId = $document->getInternalId(); $dbForProject = $this->getProjectDB($project); // Delete all sessions of this user from the sessions table and update the sessions field of the user record $this->deleteByGroup('sessions', [ - Query::equal('userId', [$userId]) + Query::equal('userInternalId', [$userInternalId]) ], $dbForProject); $dbForProject->deleteCachedDocument('users', $userId); // Delete Memberships and decrement team membership counts $this->deleteByGroup('memberships', [ - Query::equal('userId', [$userId]) + Query::equal('userInternalId', [$userInternalId]) ], $dbForProject, function (Document $document) use ($dbForProject) { if ($document->getAttribute('confirm')) { // Count only confirmed members $teamId = $document->getAttribute('teamId'); @@ -352,7 +362,7 @@ class DeletesV1 extends Worker 'teams', $teamId, // Ensure that total >= 0 - $team->setAttribute('total', \max($team->getAttribute('total', 0) - 1, 0)) + $team->setAttribute('total', \max($team->getAttribute('total', 0) - 1, 0)) ); } } @@ -360,7 +370,7 @@ class DeletesV1 extends Worker // Delete tokens $this->deleteByGroup('tokens', [ - Query::equal('userId', [$userId]) + Query::equal('userInternalId', [$userInternalId]) ], $dbForProject); } @@ -475,13 +485,14 @@ class DeletesV1 extends Worker $projectId = $project->getId(); $dbForProject = $this->getProjectDB($project); $functionId = $document->getId(); + $functionInternalId = $document->getInternalId(); /** * Delete Variables */ Console::info("Deleting variables for function " . $functionId); $this->deleteByGroup('variables', [ - Query::equal('functionId', [$functionId]) + Query::equal('functionInternalId', [$functionInternalId]) ], $dbForProject); /**