'Created Booking', 'message' => 'You have successfully created a new Booking' ]; } /** @var CanCreateBooking */ private $canCreateBooking; /** @var CreatesBooking */ private $createsBooking; /** @var GeneratesBookingMarking */ private $generatesBookingMarking; /** @var FetchesCompany */ private $fetchesCompany; /** @var CreateCompanyProcessor */ private $createCompanyProcessor; /** * CreateBookingLogic constructor. * @param CanCreateBooking $canCreateBooking * @param CreatesBooking $createsBooking * @param GeneratesBookingMarking $generatesBookingMarking * @param FetchesCompany $fetchesCompany * @param CreateCompanyProcessor $createCompanyProcessor */ public function __construct(CanCreateBooking $canCreateBooking, CreatesBooking $createsBooking, GeneratesBookingMarking $generatesBookingMarking, FetchesCompany $fetchesCompany, CreateCompanyProcessor $createCompanyProcessor) { $this->canCreateBooking = $canCreateBooking; $this->createsBooking = $createsBooking; $this->generatesBookingMarking = $generatesBookingMarking; $this->fetchesCompany = $fetchesCompany; $this->createCompanyProcessor = $createCompanyProcessor; } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request) : JsonResponse { $object = new BookingObject($request->input('service_id'), $request->input('transferable_bank_id'), $this->generatesBookingMarking->execute(), number_format( floatval(str_replace(',', '', $request->input('fix_amount'))), 5, '.', ''), $request->input('type') === 1 ? $request->input('convertible_currency_id') : 1, $request->input('convertible_currency_id'), 1); if($object->getServiceId() == '5') { $company = $this->createCompanyProcessor->execute($request, BusinessType::ONESIXSIXEIGHT); } else { $company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]); } $this->canCreateBooking->passes($object); $booking = $this->createsBooking->execute($company, $object); return $this->resourceResponse(new BookingResource($booking)); } }