diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php index 7d684a1e5..f9f4cd2d0 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php @@ -717,8 +717,17 @@ public function preValidatePromoCode($summit_id, $promo_code_val) if (is_null($filter)) $filter = new Filter(); + if (!$filter->hasFilter('ticket_type_id')) + return $this->error412("Type ID is required."); + + if (!$filter->hasFilter('ticket_type_qty')) + return $this->error412("Quantity is required."); + + if (!$filter->hasFilter('ticket_type_subtype')) + return $this->error412("Subtype is required."); + $filter->validate([ - 'ticket_type_id' => 'required|integer', + 'ticket_type_id' => 'integer', 'ticket_type_qty' => [ 'required', 'integer', @@ -729,11 +738,16 @@ function ($attribute, $value, $fail) use ($filter) { } }, ], - 'ticket_type_subtype' => 'required|string|in:'.join(",", SummitTicketType::SubTypes), + 'ticket_type_subtype' => 'string|in:'.join(",", SummitTicketType::SubTypes), ]); - $this->promo_code_service - ->preValidatePromoCode($summit, $this->resource_server_context->getCurrentUser(), $promo_code_val, $filter); + $this->promo_code_service->preValidatePromoCode( + $summit, + $this->resource_server_context->getCurrentUser(), + $promo_code_val, + intval($filter->getUniqueFilter('ticket_type_id')->getValue()), + $filter->getUniqueFilter('ticket_type_subtype')->getValue(), + intval($filter->getUniqueFilter('ticket_type_qty')->getValue())); return $this->ok(); }); diff --git a/app/Services/Model/ISummitPromoCodeService.php b/app/Services/Model/ISummitPromoCodeService.php index 787b37fa7..00cb7b7a3 100644 --- a/app/Services/Model/ISummitPromoCodeService.php +++ b/app/Services/Model/ISummitPromoCodeService.php @@ -139,9 +139,12 @@ public function removePromoCodeSpeaker(SummitRegistrationPromoCode $promo_code, * @param Summit $summit * @param Member $owner * @param string $promo_code_value - * @param Filter $filter + * @param int $ticket_type_id + * @param string $ticket_type_subtype + * @param int $qty * @return void * @throws \Exception */ - public function preValidatePromoCode(Summit $summit, Member $owner, string $promo_code_value, Filter $filter):void; + public function preValidatePromoCode( + Summit $summit, Member $owner, string $promo_code_value, int $ticket_type_id, string $ticket_type_subtype, int $qty):void; } \ No newline at end of file diff --git a/app/Services/Model/Imp/SummitPromoCodeService.php b/app/Services/Model/Imp/SummitPromoCodeService.php index b6c841c7a..3e1600c7c 100644 --- a/app/Services/Model/Imp/SummitPromoCodeService.php +++ b/app/Services/Model/Imp/SummitPromoCodeService.php @@ -756,24 +756,22 @@ public function removePromoCodeSpeaker(SummitRegistrationPromoCode $promo_code, * @param Summit $summit * @param Member $owner * @param string $promo_code_value - * @param Filter $filter + * @param int $ticket_type_id + * @param string $ticket_type_subtype + * @param int $qty * @return void * @throws \Exception */ - public function preValidatePromoCode(Summit $summit, Member $owner, string $promo_code_value, Filter $filter):void + public function preValidatePromoCode( + Summit $summit, Member $owner, string $promo_code_value, int $ticket_type_id, string $ticket_type_subtype, int $qty):void { - $this->tx_service->transaction(function () use ($summit, $owner, $promo_code_value, $filter) { - - $ticket_type_id = intval($filter->getUniqueFilter('ticket_type_id')->getValue()); + $this->tx_service->transaction(function () use ($summit, $owner, $promo_code_value, $ticket_type_id, $ticket_type_subtype, $qty) { $ticket_type = $summit->getTicketTypeById($ticket_type_id); if (is_null($ticket_type)) { throw new EntityNotFoundException(sprintf("Ticket Type %s not found on summit %s.", $ticket_type_id, $summit->getId())); } - $ticket_type_subtype = $filter->getUniqueFilter('ticket_type_subtype')->getValue(); - $qty = intval($filter->getUniqueFilter('ticket_type_qty')->getValue()); - $validator = PromoCodeValidationStrategyFactory::createStrategy($ticket_type, $ticket_type_subtype, $qty, $owner); $promo_code = $this->repository->getByValueExclusiveLock($summit, $promo_code_value); @@ -781,7 +779,6 @@ public function preValidatePromoCode(Summit $summit, Member $owner, string $prom if (!$promo_code instanceof SummitRegistrationPromoCode || $promo_code->getSummitId() != $summit->getId() || !$validator->isValid($promo_code)){ throw new ValidationException(sprintf('The Promo Code "%s" is not a valid code.', $promo_code_value)); } - }); } } \ No newline at end of file