/**
  * Increases the balance to the profile with given uniqueness, the given
  * amount. It also logs the operation using given description.
  *
  * @param string $uniqueness
  * @param int    $amount
  * @param string $description
  *
  * @throws NonExistentUniquenessSharedException
  */
 public function increase($uniqueness, $amount, $description)
 {
     $result = $this->connectToStorageInternalWorker->connect()->update(['uniqueness' => $uniqueness], ['$inc' => ['balance' => $amount]]);
     if ($result['n'] == 0) {
         throw new NonExistentUniquenessSharedException($uniqueness);
     }
     $this->logOperationInternalWorker->log($uniqueness, $amount, LogOperationInternalWorker::IMPACT_POSITIVE, $description);
 }
 /**
  * Decreases the balance to the profile with given uniqueness, the given
  * amount. It also logs the operation using given description.
  *
  * @param string $uniqueness
  * @param int    $amount
  * @param string $description
  *
  * @throws NonExistentUniquenessSharedException
  * @throws InsufficientBalanceSharedException
  */
 public function decrease($uniqueness, $amount, $description)
 {
     $item = $this->connectToStorageInternalWorker->connect()->findOne(['uniqueness' => $uniqueness], ['balance']);
     if (!$item) {
         throw new NonExistentUniquenessSharedException($uniqueness);
     }
     if ($amount > $item['balance']) {
         throw new InsufficientBalanceSharedException();
     }
     $this->connectToStorageInternalWorker->connect()->update(['uniqueness' => $uniqueness], ['$inc' => ['balance' => -1 * $amount]]);
     $this->logOperationInternalWorker->log($uniqueness, $amount, LogOperationInternalWorker::IMPACT_NEGATIVE, $description);
 }
 /**
  * Logs an operation.
  *
  * @param string $uniqueness
  * @param int    $amount
  * @param string $impact
  * @param string $description
  */
 public function log($uniqueness, $amount, $impact, $description)
 {
     $this->logOperationInternalWorker->log($uniqueness, $amount, $impact, $description);
 }