'Created Company Wallet', 'message' => 'You have successfully created a company wallet' ]; } /** @var CreatesWallet */ private $createsWallet; /** @var GeneratesWalletCode */ private $generatesWalletCode; /** @var CanCreateCompanyWallet */ private $canCreateCompanyWallet; /** * CreateWalletLogic constructor. * @param CreatesWallet $createsWallet * @param GeneratesWalletCode $generatesWalletCode * @param CanCreateCompanyWallet $canCreateCompanyWallet */ public function __construct(CreatesWallet $createsWallet, GeneratesWalletCode $generatesWalletCode, CanCreateCompanyWallet $canCreateCompanyWallet) { $this->createsWallet = $createsWallet; $this->generatesWalletCode = $generatesWalletCode; $this->canCreateCompanyWallet = $canCreateCompanyWallet; } /** * @param Request $request * @return JsonResponse * @throws ErrorException */ public function logic(Request $request) : JsonResponse { try { DB::beginTransaction(); $object = new WalletObject($request->input('currency_id'), $request->input('company_id'), $this->generatesWalletCode->execute()); $this->canCreateCompanyWallet->passes($object); $wallet = $this->createsWallet->execute($object); DB::commit(); return $this->resourceResponse(new WalletResource($wallet)); } catch (\Exception $exception) { throw new ErrorException($exception->getMessage(), $exception->getCode()); } } }