protected function _populateCustomerData()
 {
     $result[self::CFG_CUST_BALANCE] = 0;
     if ($this->sessionCustomer) {
         $customerId = $this->sessionCustomer->getCustomerId();
         $assetTypeId = $this->repoAssetType->getIdByCode(\Praxigento\Wallet\Config::CODE_TYPE_ASSET_WALLET_ACTIVE);
         $account = $this->repoAccount->getByCustomerId($customerId, $assetTypeId);
         if ($account) {
             $balance = $account->getBalance();
             $result[self::CFG_CUST_BALANCE] = $balance;
         }
     }
     return $result;
 }
 /**
  * Get account data or create new account if customer has no account for the requested asset.
  *
  * @param Request\Get $request
  *
  * @return Response\Get
  */
 public function get(Request\Get $request)
 {
     $result = new Response\Get();
     $this->_logger->info("'Get account' operation is called.");
     $accountId = $request->getAccountId();
     $customerId = $request->getCustomerId();
     $assetTypeId = $request->getAssetTypeId();
     $assetTypeCode = $request->getAssetTypeCode();
     $createNewAccIfMissed = $request->getCreateNewAccountIfMissed();
     /* accountId has the highest priority */
     if ($accountId) {
         $data = $this->_repoAccount->getById($accountId);
     } else {
         /* try to look up by customer id & asset type id */
         if (!$assetTypeId) {
             /* get asset type ID by asset code */
             $assetTypeId = $this->_repoTypeAsset->getIdByCode($assetTypeCode);
         }
         /* get account by customerId & assetTypeId */
         $data = $this->_repoAccount->getByCustomerId($customerId, $assetTypeId);
     }
     /* analyze found data */
     if ($data) {
         $result->setData($data);
         $result->markSucceed();
     } else {
         if ($createNewAccIfMissed) {
             /* not found - add new account */
             $data = [Account::ATTR_CUST_ID => $customerId, Account::ATTR_ASSET_TYPE_ID => $assetTypeId, Account::ATTR_BALANCE => 0];
             $accId = $this->_repoAccount->create($data);
             $data[Account::ATTR_ID] = $accId;
             $result->setData($data);
             $result->markSucceed();
             $this->_logger->info("There is no account for customer #{$customerId} and asset type #{$assetTypeId}. New account #{$accId} is created.");
         }
     }
     $this->_logger->info("'Get account' operation is completed.");
     return $result;
 }
 public function getRepresentativeAccountId($assetTypeId)
 {
     /* TODO: add cache for accounts ids */
     $result = null;
     $custId = $this->getRepresentativeCustomerId();
     if ($custId) {
         $found = $this->_repoAccount->getByCustomerId($custId, $assetTypeId);
         if ($found) {
             $result = $found->getId();
         }
     }
     return $result;
 }