entityManager = $entityManager; $this->userMerchantStore = $userMerchantStore; } public function createIfNotExist(UserInterface $user, MerchantInterface $merchant, $flush = true): UserMerchantInterface { $userMerchant = $this->userMerchantStore ->setMerchant($merchant) ->getOneByUser($user); if (!$userMerchant) { $userMerchantFactory = new UserMerchantFactory(); $userMerchant = $userMerchantFactory->create($merchant, $user); $this->entityManager->create($userMerchant); if($flush) { $this->entityManager->flush(); } }elseif(!$userMerchant->getActive()){ $userMerchant->setActive(true); $this->entityManager->update($userMerchant); if($flush) { $this->entityManager->flush(); } } return $userMerchant; } public function init( UserInterface $user, MerchantInterface $merchant, bool $active = true, bool $creditActive = false, float $credit = null, bool $persist = true ): UserMerchantInterface { $userMerchant = $this->createIfNotExist($user, $merchant); $userMerchant->setActive($active); $userMerchant->setCreditActive($creditActive); $userMerchant->setCredit($credit); if ($persist) { //TODO create ou update ??? $this->entityManager->persist($userMerchant); $this->entityManager->flush(); } return $userMerchant; } public function activeCredit(UserMerchantInterface $userMerchant): UserMerchantInterface { return $this->updateCreditActive($userMerchant, true); } public function unactiveCredit(UserMerchantInterface $userMerchant): UserMerchantInterface { return $this->updateCreditActive($userMerchant, false); } public function updateCredit( UserMerchantInterface $userMerchant, CreditHistoryInterface $creditHistory, float $amount ): UserMerchantInterface { $userMerchant->setCredit($amount); $this->entityManager->update($creditHistory); $this->entityManager->update($userMerchant); $this->entityManager->flush(); return $userMerchant; } public function updateCreditActive( UserMerchantInterface $userMerchant, $creditActive = true ): UserMerchantInterface { $userMerchant->setCreditActive($creditActive); //TODO create ou update ??? $this->entityManager->persist($userMerchant); $this->entityManager->flush(); return $userMerchant; } }