'Delete Booking', 'message' => 'You have successfully deleted the Booking' ]; } /** @var CanDeleteBooking */ private $canDeleteBooking; /** @var DeletesBooking */ private $deletesBooking; /** @var FetchesBooking */ private $fetchesBooking; public function __construct( CanDeleteBooking $canDeleteBooking, DeletesBooking $deletesBooking, FetchesBooking $fetchesBooking ) { $this->canDeleteBooking = $canDeleteBooking; $this->deletesBooking = $deletesBooking; $this->fetchesBooking = $fetchesBooking; } /** * @param Request $request * @return JsonResponse * @throws ErrorException */ public function logic(Request $request) : JsonResponse { try { DB::beginTransaction(); $booking = $this->fetchesBooking->execute(['id' => $request->route('id')]); $this->canDeleteBooking->passes(); $this->deletesBooking->execute($booking); DB::commit(); return $this->resourceResponse(new BookingResource($booking)); } catch (\Exception $exception){ throw new ErrorException($exception->getMessage(), $exception->getCode()); } } }