argument('type'); $file = $this->getFileFor($type); $gzOpenedFile = gzopen($file, "r"); $this->processItems($gzOpenedFile, $type); } private function getFileFor(string $type) { $path = storage_path('/'.$type."*"); $file = glob($path); return reset($file); } private function processItems($gzOpenedFile, string $type) { while ($line = fgets($gzOpenedFile)) { $decodedLine = json_decode($line, true); if (null === $decodedLine) { continue; } $this->processItem($decodedLine, $type); } } private function processItem($decodedLine, string $type) { $itemToFetch = ItemToFetch::where('tmdb_id', $decodedLine['id'])->where('type', $type)->first(); if ($itemToFetch) { return; } if ($type === ItemToFetch::TYPE_MOVIE) { $movie = Movie::where('tmdb_id', $decodedLine['id'])->first(); if ($movie) { return; } $jobs = ItemToFetchJobs::MOVIE_JOBS; $jobs[] = "Details"; } else { $show = Show::where('tmdb_id', $decodedLine['id'])->first(); if ($show) { return; } $jobs = ItemToFetchJobs::SHOW_JOBS; $jobs[] = "Details"; } ItemToFetch::create([ 'tmdb_id' => $decodedLine['id'], 'type' => $type, ]); ItemToFetchJobs::create([ 'tmdb_id' => $decodedLine['id'], 'type' => $type, 'remaining_jobs' => json_encode($jobs), 'jobs' => implode(',', $jobs), ]); } }