/** * Deletes the subscription with given mobile and uniqueness. * * @param string $mobile * @param string $uniqueness * * @throws NonExistentMobileAndUniquenessApiException */ public function delete($mobile, $uniqueness) { $subscription = $this->connectToStorageInternalWorker->connect()->findOne(['mobile' => $mobile, 'uniqueness' => $uniqueness]); if (!$subscription) { throw new NonExistentMobileAndUniquenessApiException(); } // Increase to the balance what the subscription balance has $this->increaseBalanceInternalWorker->increase($uniqueness, $subscription['balance']); // Remove subscription $this->connectToStorageInternalWorker->connect()->remove(['mobile' => $mobile, 'uniqueness' => $uniqueness]); $this->logOperationInternalWorker->logDelete($mobile, $uniqueness, $subscription['topics'], $subscription['trial'], $subscription['balance'], time()); }
/** * @param string $mobile * @param string $uniqueness * @param string $alias * @param string[] $topics * @param int $amount * * @throws TrialNotAcceptedInternalException * @throws ExistentMobileInternalException */ public function create($mobile, $uniqueness, $alias, $topics, $amount) { if ($this->checkOperationInternalWorker->checkTrial($mobile)) { throw new TrialNotAcceptedInternalException(); } try { $this->createSubscriptionInternalWorker->create($mobile, $uniqueness, $alias, $topics, $amount, 0, true); } catch (ExistentMobileInternalException $e) { throw $e; } $this->enqueueMessageApiWorker->enqueue($mobile, sprintf("Tu telefono se ha subscrito con %s sms gratis para recibir noticias %s que seleccionaste.", 10, count($topics) == 1 ? "del topico" : sprintf("de los %s topicos", count($topics)))); $this->logOperationInternalWorker->logTrial($mobile, $uniqueness, $topics, time()); }
/** * @param string $mobile * @param string $uniqueness * @param string $alias * @param string[] $topics * @param array $resellPackage * * @throws InsufficientBalanceInternalException * @throws ExistentMobileInternalException */ public function create($mobile, $uniqueness, $alias, $topics, $resellPackage) { if (!$this->checkBalanceInternalWorker->check($uniqueness, $resellPackage['amount'])) { throw new InsufficientBalanceInternalException(); } try { $this->createSubscriptionInternalWorker->create($mobile, $uniqueness, $alias, $topics, 0, $resellPackage['amount'], true); } catch (ExistentMobileInternalException $e) { throw $e; } $this->decreaseBalanceInternalWorker->decrease($uniqueness, $resellPackage['amount']); if (!$this->checkOperationInternalWorker->checkTrial($mobile) && !$this->checkOperationInternalWorker->checkCreate($mobile)) { $this->enqueueMessageApiWorker->enqueue($mobile, sprintf("Tu telefono se ha subscrito con %s sms para recibir noticias %s que seleccionaste.", $resellPackage['amount'], count($topics) == 1 ? "del topico" : sprintf("de los %s topicos", count($topics)))); } $this->logOperationInternalWorker->logCreate($mobile, $uniqueness, $topics, $resellPackage['amount'], time()); }
/** * @param string $mobile * @param string $uniqueness * @param string[] $topics * @param string $resellPackage * * @throws NonExistentMobileAndUniquenessApiException * @throws NoTopicsApiException * @throws NonExistentTopicApiException * @throws NoResellPackageApiException * @throws NonExistentResellPackageInternalException * @throws TrialNotAcceptedApiException * @throws InsufficientBalanceApiException */ public function recharge($mobile, $uniqueness, $topics, $resellPackage) { $subscription = $this->connectToStorageInternalWorker->connect()->findOne(['mobile' => $mobile, 'uniqueness' => $uniqueness]); if (!$subscription) { throw new NonExistentMobileAndUniquenessApiException(); } if (count($topics) == 0) { throw new NoTopicsApiException(); } foreach ($topics as $topic) { try { $this->pickTopicApiWorker->pick($topic); } catch (NonExistentIdApiException $e) { throw new NonExistentTopicApiException(); } } if (!$resellPackage) { throw new NoResellPackageApiException(); } // Pick resell package to use amount try { $resellPackage = $this->pickResellPackageInternalWorker->pick($resellPackage); } catch (NonExistentResellPackageInternalException $e) { throw $e; } if ($resellPackage['price'] == 0) { throw new TrialNotAcceptedApiException(); } if (!$this->checkBalanceInternalWorker->check($uniqueness, $resellPackage['amount'])) { throw new InsufficientBalanceApiException(); } $this->connectToStorageInternalWorker->connect()->update(['mobile' => $mobile, 'uniqueness' => $uniqueness], ['$set' => ['topics' => $topics], '$inc' => ['balance' => $resellPackage['amount']]]); $this->decreaseBalanceInternalWorker->decrease($uniqueness, $resellPackage['amount']); $this->enqueueMessageApiWorker->enqueue($mobile, sprintf("Tu telefono se ha recargado con %s sms para seguir recibiendo noticias.", $resellPackage['amount'])); $this->logOperationInternalWorker->logRecharge($mobile, $uniqueness, $topics, $subscription['trial'], $subscription['balance'], $resellPackage['amount'], time()); try { $this->deleteLowBalanceReminderLogInternalWorker->delete($mobile); } catch (NonExistentMobileInternalException $e) { // This subscription did not have a low balance reminder log } }
/** * Logs a create operation. * * @param string $mobile * @param string $uniqueness * @param string[] $topics * @param int $amount * @param int $timestamp */ public function logCreate($mobile, $uniqueness, $topics, $amount, $timestamp) { $this->logOperationInternalWorker->logCreate($mobile, $uniqueness, $topics, $amount, $timestamp); }