diff --git a/src/Migration/Destination.php b/src/Migration/Destination.php index 2a3b95e..a20919e 100644 --- a/src/Migration/Destination.php +++ b/src/Migration/Destination.php @@ -27,13 +27,12 @@ public function setSource(Source $source): self * @param array $resources Resources to transfer * @param callable $callback Callback to run after transfer * @param string $rootResourceId Root resource ID, If enabled you can only transfer a single root resource - * @param int $batchSize The number of resources to transfer in a single batch */ public function run( array $resources, callable $callback, string $rootResourceId = '', - int $batchSize = 100, + string $rootResourceType = '', ): void { $this->source->run( $resources, @@ -41,7 +40,7 @@ function (array $resources) use ($callback) { $this->import($resources, $callback); }, $rootResourceId, - $batchSize + $rootResourceType, ); } diff --git a/src/Migration/Destinations/Appwrite.php b/src/Migration/Destinations/Appwrite.php index ff21d6a..66c0018 100644 --- a/src/Migration/Destinations/Appwrite.php +++ b/src/Migration/Destinations/Appwrite.php @@ -1337,9 +1337,4 @@ private function importDeployment(Deployment $deployment): Resource return $deployment; } - - public function getBatchSize(): int - { - return 200; - } } diff --git a/src/Migration/Source.php b/src/Migration/Source.php index ed43d23..46333b6 100644 --- a/src/Migration/Source.php +++ b/src/Migration/Source.php @@ -30,14 +30,10 @@ public function callback(array $resources): void * @param callable $callback Callback to run after transfer * @param string $rootResourceId Root resource ID, If enabled you can only transfer a single root resource */ - public function run( - array $resources, - callable $callback, - string $rootResourceId = '', - int $batchSize = 100 - ): void + public function run(array $resources, callable $callback, string $rootResourceId = '', string $rootResourceType = ''): void { $this->rootResourceId = $rootResourceId; + $this->rootResourceType = $rootResourceType; $this->transferCallback = function (array $returnedResources) use ($callback, $resources) { $prunedResources = []; @@ -54,21 +50,20 @@ public function run( $this->cache->addAll($prunedResources); }; - $batchSize = $this->getBatchSize(); - - $this->exportResources($resources, $batchSize); + $this->exportResources($resources); } /** * Export Resources * * @param array $resources Resources to export - * @param int $batchSize Max 100 */ - public function exportResources(array $resources, int $batchSize): void + public function exportResources(array $resources): void { // Convert Resources back into their relevant groups + $batchSize = $this->getBatchSize(); + $groups = []; foreach ($resources as $resource) { if (\in_array($resource, Transfer::GROUP_AUTH_RESOURCES)) { @@ -104,6 +99,10 @@ public function exportResources(array $resources, int $batchSize): void } } } + public function getBatchSize(): int + { + return 100; + } /** * Export Auth Group diff --git a/src/Migration/Sources/Appwrite.php b/src/Migration/Sources/Appwrite.php index d437fa0..165c2a9 100644 --- a/src/Migration/Sources/Appwrite.php +++ b/src/Migration/Sources/Appwrite.php @@ -380,7 +380,7 @@ private function exportUsers(int $batchSize): void $queries = [Query::limit($batchSize)]; - if (!empty($this->rootResourceId)) { + if ($this->rootResourceId !== '' && $this->rootResourceType === Resource::TYPE_USER) { $queries[] = Query::equal('$id', $this->rootResourceId); $queries[] = Query::limit(1); } @@ -433,7 +433,7 @@ private function exportTeams(int $batchSize): void $queries = [Query::limit($batchSize)]; - if (!empty($this->rootResourceId)) { + if ($this->rootResourceId !== '' && $this->rootResourceType === Resource::TYPE_TEAM) { $queries[] = Query::equal('$id', $this->rootResourceId); $queries[] = Query::limit(1); } @@ -872,7 +872,7 @@ private function exportDatabases(int $batchSize): void while (true) { $queries = [Query::limit($batchSize)]; - if (!empty($this->rootResourceId)) { + if ($this->rootResourceId !== '' && $this->rootResourceType === Resource::TYPE_DATABASE) { $queries[] = Query::equal('$id', $this->rootResourceId); $queries[] = Query::limit(1); } @@ -1116,7 +1116,7 @@ private function exportBuckets(int $batchSize): void { $queries = []; - if (!empty($this->rootResourceId)) { + if ($this->rootResourceId !== '' && $this->rootResourceType === Resource::TYPE_BUCKET) { $queries[] = Query::equal('$id', $this->rootResourceId); $queries[] = Query::limit(1); } @@ -1284,7 +1284,7 @@ private function exportFunctions(int $batchSize): void $queries = []; - if (!empty($this->rootResourceId)) { + if ($this->rootResourceId !== '' && $this->rootResourceType === Resource::TYPE_FUNCTION) { $queries[] = Query::equal('$id', $this->rootResourceId); $queries[] = Query::limit(1); } @@ -1471,4 +1471,9 @@ private function exportDeploymentData(Func $func, array $deployment): void } } } -} + + public function getBatchSize(): int + { + return 250; + } +} \ No newline at end of file diff --git a/src/Migration/Target.php b/src/Migration/Target.php index e4f0140..c0e01f4 100644 --- a/src/Migration/Target.php +++ b/src/Migration/Target.php @@ -33,6 +33,8 @@ abstract class Target protected string $rootResourceId = ''; + protected string $rootResourceType = ''; + abstract public static function getName(): string; abstract public static function getSupportedResources(): array; @@ -225,9 +227,4 @@ public function addWarning(Warning $warning): void public function shutdown(): void { } - - public function getBatchSize(): int - { - return 100; - } } diff --git a/src/Migration/Transfer.php b/src/Migration/Transfer.php index ce5f0ec..c3c6faf 100644 --- a/src/Migration/Transfer.php +++ b/src/Migration/Transfer.php @@ -181,17 +181,19 @@ public function getStatusCounters(): array * @param array $resources Resources to transfer * @param callable $callback Callback to run after transfer * @param string|null $rootResourceId Root resource ID, If enabled you can only transfer a single root resource - * @param int $batchSize * @throws \Exception */ public function run( array $resources, callable $callback, string $rootResourceId = null, - int $batchSize = 100 + string $rootResourceType = null, ): void { // Allows you to push entire groups if you want. $computedResources = []; + $rootResourceId = $rootResourceId ?? ''; + $rootResourceType = $rootResourceType ?? ''; + foreach ($resources as $resource) { if (is_array($resource)) { $computedResources = array_merge($computedResources, $resource); @@ -202,13 +204,12 @@ public function run( $computedResources = array_map('strtolower', $computedResources); - // Check we don't have multiple root resources if rootResourceId is set - $rootResourceId = $rootResourceId ?? ''; - if ($rootResourceId) { - $rootResourceCount = \count(\array_intersect($computedResources, self::ROOT_RESOURCES)); - if ($rootResourceCount > 1) { - throw new \Exception('Multiple root resources found. Only one root resource can be transferred at a time if using $rootResourceId.'); + if ($rootResourceId !== '') { + if ($rootResourceType === '') { + throw new \Exception('Please $rootResourceId while using $rootResourceId'); } + + $computedResources = [$rootResourceType]; } $this->resources = $computedResources; @@ -217,7 +218,7 @@ public function run( $computedResources, $callback, $rootResourceId, - $batchSize + $rootResourceType, ); }