entityManager = $entityManager; $this->userMerchantStore = $userMerchantStore; } public function createIfNotExist(UserInterface $user, MerchantInterface $merchant): UserMerchantInterface { $userMerchant = $this->userMerchantStore ->setMerchant($merchant) ->getOneByUser($user); if (!$userMerchant) { $userMerchantFactory = new UserMerchantFactory(); $userMerchant = $userMerchantFactory->create($user, $merchant); } 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 updateCreditActive( UserInterface $user, MerchantInterface $merchant, $creditActive = true ): UserMerchantInterface { $userMerchant = $this->createIfNotExist($user, $merchant); $userMerchant->setCreditActive($creditActive); //TODO create ou update ??? $this->entityManager->persist($userMerchant); $this->entityManager->flush(); return $userMerchant; } public function activeCredit(UserInterface $user, MerchantInterface $merchant): UserMerchantInterface { return $this->updateCreditActive($user, $merchant, true); } public function unactiveCredit(UserInterface $user, MerchantInterface $merchant): UserMerchantInterface { return $this->updateCreditActive($user, $merchant, 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; } }