subscriptionChangeRepository = $subscriptionChangeRepository; $this->subscriptionChangeWriter = $subscriptionChangeWriter; $this->subscriptionChangeRequestParser = $subscriptionChangeRequestParser; } public function saveSubscriptionChanges(string $urlsSubscribed, string $urlsUnsubscribed, string $userId) : void { $subscriptionChanges = $this->subscriptionChangeRequestParser->createSubscriptionChangeList($urlsSubscribed, $urlsUnsubscribed); foreach ($subscriptionChanges as $urlChangedSubscriptionStatus) { $subscriptionChangeEntity = new SubscriptionChangeEntity(); $subscriptionChangeEntity->setUrl($urlChangedSubscriptionStatus->getUrl()); $subscriptionChangeEntity->setSubscribed($urlChangedSubscriptionStatus->isSubscribed()); $subscriptionChangeEntity->setUpdated((new \DateTime())->format("Y-m-d\TH:i:s")); $subscriptionChangeEntity->setUserId($userId); try { $this->subscriptionChangeWriter->create($subscriptionChangeEntity); } catch (UniqueConstraintViolationException $ex) { $idEpisodeActionEntityToUpdate = $this->subscriptionChangeRepository->findByUrl($subscriptionChangeEntity->getUrl(), $userId)->getId(); $subscriptionChangeEntity->setId($idEpisodeActionEntityToUpdate); $this->subscriptionChangeWriter->update($subscriptionChangeEntity); } } } }