'Withdraw from Company Wallet', 'message' => 'You have successfully withdraw company wallet' ]; } /** @var FetchesWallet */ private $fetchesWallet; /** @var CanWithdrawWallet */ private $canWithdrawWallet; /** @var CreateWalletTransactionProcessor */ private $createWalletTransactionProcessor; /** * CreateWalletLogic constructor. * @param CreatesWallet $createsWallet * @param GeneratesWalletCode $generatesWalletCode * @param CanCreateCompanyWallet $canCreateCompanyWallet */ public function __construct(CanWithdrawWallet $canWithdrawWallet, FetchesWallet $fetchesWallet, CreateWalletTransactionProcessor $createWalletTransactionProcessor) { $this->canWithdrawWallet = $canWithdrawWallet; $this->fetchesWallet = $fetchesWallet; $this->createWalletTransactionProcessor = $createWalletTransactionProcessor; } /** * @param Request $request * @return JsonResponse * @throws ErrorException */ public function logic(Request $request) : JsonResponse { $wallet = $this->fetchesWallet->execute(['id' => $request->input('wallet_id')]); $walletOject = new WalletObject( $wallet->company->id, $wallet->currency_id, $wallet->code, $request->input('amount')); $this->canWithdrawWallet->passes($walletOject); $transaction = $this->createWalletTransactionProcessor->execute($wallet, $walletOject, TransactionType::WITHDRAW); return $this->resourceResponse(new WalletResource($wallet)); } }