diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 3b3039a0fd..ed23fb1bb5 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -212,7 +212,8 @@ App::delete('/v1/teams/:teamId') ->inject('response') ->inject('projectDB') ->inject('events') - ->action(function ($teamId, $response, $projectDB, $events) { + ->inject('deletes') + ->action(function ($teamId, $response, $projectDB, $events, $deletes) { /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $events */ @@ -223,25 +224,15 @@ App::delete('/v1/teams/:teamId') throw new Exception('Team not found', 404); } - $memberships = $projectDB->getCollection([ - 'limit' => 2000, // TODO add members limit - 'offset' => 0, - 'filters' => [ - '$collection='.Database::SYSTEM_COLLECTION_MEMBERSHIPS, - 'teamId='.$teamId, - ], - ]); - - foreach ($memberships as $member) { - if (!$projectDB->deleteDocument($member->getId())) { - throw new Exception('Failed to remove membership for team from DB', 500); - } - } - if (!$projectDB->deleteDocument($teamId)) { throw new Exception('Failed to remove team from DB', 500); } + $deletes + ->setParam('type', DELETE_TYPE_DOCUMENT) + ->setParam('document', $team) + ; + $events ->setParam('eventData', $response->output($team, Response::MODEL_TEAM)) ; diff --git a/app/workers/deletes.php b/app/workers/deletes.php index 63551e90f9..006c38c6dc 100644 --- a/app/workers/deletes.php +++ b/app/workers/deletes.php @@ -31,7 +31,7 @@ class DeletesV1 extends Worker public function run(): void { - $projectId = isset($this->args['projectId']) ? $this->args['projectId'] : ''; + $projectId = isset($this->args['projectId']) ? $this->args['projectId'] : ''; $type = $this->args['type']; switch (strval($type)) { @@ -51,6 +51,9 @@ class DeletesV1 extends Worker case Database::SYSTEM_COLLECTION_COLLECTIONS: $this->deleteDocuments($document, $projectId); break; + case Database::SYSTEM_COLLECTION_TEAMS: + $this->deleteMemberships($document, $projectId); + break; default: Console::error('No lazy delete operation available for document of type: '.$document->getCollection()); break; @@ -95,6 +98,14 @@ class DeletesV1 extends Worker ], $this->getProjectDB($projectId)); } + protected function deleteMemberships(Document $document, $projectId) { + // Delete Memberships + $this->deleteByGroup([ + '$collection='.Database::SYSTEM_COLLECTION_MEMBERSHIPS, + 'teamId='.$document->getId(), + ], $this->getProjectDB($projectId)); + } + protected function deleteProject(Document $document) { // Delete all DBs @@ -212,7 +223,7 @@ class DeletesV1 extends Worker Console::success('Delete code tag: '.$document->getAttribute('path', '')); } else { - Console::error('Dailed to delete code tag: '.$document->getAttribute('path', '')); + Console::error('Failed to delete code tag: '.$document->getAttribute('path', '')); } }); @@ -260,7 +271,6 @@ class DeletesV1 extends Worker Authorization::disable(); $projects = $this->getConsoleDB()->getCollection([ 'limit' => $limit, - 'offset' => $count, 'orderType' => 'ASC', 'orderCast' => 'string', 'filters' => [ @@ -303,7 +313,6 @@ class DeletesV1 extends Worker $results = $database->getCollection([ 'limit' => $limit, - 'offset' => $count, 'orderField' => '$id', 'orderType' => 'ASC', 'orderCast' => 'string',