entityManager->getRepository(EntityManga::class)->find($id); if (!$mangaEntity) { return null; } // Récupération des sources préférées avec l'ordre depuis la nouvelle entité $preferredSourceIds = []; $mangaPreferredSource = $this->entityManager->getRepository(MangaPreferredSourceEntity::class) ->findOneBy(['mangaId' => $mangaEntity->getId()]); if ($mangaPreferredSource) { $preferredSourceIds = $mangaPreferredSource->getOrderedSourceIds(); } return new Manga( (string) $mangaEntity->getId(), $mangaEntity->getTitle(), $mangaEntity->getSlug(), $mangaEntity->getDescription() ?? '', $mangaEntity->getAuthor() ?? '', (string) ($mangaEntity->getPublicationYear() ?? ''), $preferredSourceIds, ); } public function updatePreferredSources(string $mangaId, array $sourceIds): void { /** @var EntityManga|null $mangaEntity */ $mangaEntity = $this->entityManager->getRepository(EntityManga::class)->find($mangaId); if (!$mangaEntity) { throw new \InvalidArgumentException("Manga not found with ID: {$mangaId}"); } // Récupérer ou créer l'entité MangaPreferredSource $mangaPreferredSource = $this->entityManager->getRepository(MangaPreferredSourceEntity::class) ->findOneBy(['mangaId' => (int) $mangaId]); if (!$mangaPreferredSource) { $mangaPreferredSource = new MangaPreferredSourceEntity(); $mangaPreferredSource->setMangaId((int) $mangaId); } // Si pas de sources, vider les sources préférées if (empty($sourceIds)) { $mangaPreferredSource->setOrderedSourceIds([]); } else { // Valider que toutes les sources existent avant de les sauvegarder $sources = $this->entityManager->getRepository(ContentSource::class)->findBy(['id' => $sourceIds]); $existingSourceIds = array_map(fn($source) => (string) $source->getId(), $sources); // Garder uniquement les sources qui existent et maintenir l'ordre $validSourceIds = array_values(array_intersect($sourceIds, $existingSourceIds)); $mangaPreferredSource->setOrderedSourceIds($validSourceIds); } $this->entityManager->persist($mangaPreferredSource); $this->entityManager->flush(); } }