em->getRepository(Import::class)->find($message->importId); if (!$import) { $this->logger->error('Import not found', ['importId' => $message->importId]); return; } $batch = array_map( fn (array $film) => new LtbxdMovie( date: new \DateTime($film['date']), name: $film['name'], year: $film['year'], ltbxdUri: $film['ltbxdUri'], ), $message->films, ); $userId = $import->getUser()->getId(); $importId = $import->getId(); foreach ($batch as $ltbxdMovie) { try { $movie = $this->filmImporter->importFromLtbxdMovie($ltbxdMovie); if (!$movie) { $this->importRepository->incrementFailedFilms($import); } else { $this->actorSyncer->syncActorsForMovie($movie); $actors = array_map(fn ($role) => $role->getActor(), $movie->getActors()->toArray()); $this->awardImporter->importForActors($actors); $user = $this->em->getReference(\App\Entity\User::class, $userId); $existingLink = $this->em->getRepository(UserMovie::class)->findOneBy([ 'user' => $user, 'movie' => $movie, ]); if (!$existingLink) { $userMovie = new UserMovie(); $userMovie->setUser($user); $userMovie->setMovie($movie); $this->em->persist($userMovie); } $this->em->flush(); } } catch (\Throwable $e) { $this->logger->warning('Failed to import film', [ 'film' => $ltbxdMovie->getName(), 'importId' => $importId, 'error' => $e->getMessage(), ]); $this->importRepository->incrementFailedFilms($import); } $processedFilms = $this->importRepository->incrementProcessedFilms($import); $this->em->clear(); $import = $this->em->getRepository(Import::class)->find($importId); if ($processedFilms >= $import->getTotalFilms()) { $import->setStatus(Import::STATUS_COMPLETED); $import->setCompletedAt(new \DateTimeImmutable()); $this->em->flush(); } } } }