diff --git a/src/Controller/Cart/ChangeItemQuantityAction.php b/src/Controller/Cart/ChangeItemQuantityAction.php index 6015402a4..80ffb6cbc 100644 --- a/src/Controller/Cart/ChangeItemQuantityAction.php +++ b/src/Controller/Cart/ChangeItemQuantityAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\ChangeItemQuantity; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\ChangeItemQuantityRequest; use Sylius\ShopApiPlugin\ViewRepository\Cart\CartViewRepositoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; diff --git a/src/Controller/Cart/DropCartAction.php b/src/Controller/Cart/DropCartAction.php index 74a3a90ab..b0204ad8e 100644 --- a/src/Controller/Cart/DropCartAction.php +++ b/src/Controller/Cart/DropCartAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\DropCart; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\DropCartRequest; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Validator\Validator\ValidatorInterface; diff --git a/src/Controller/Cart/PickupAction.php b/src/Controller/Cart/PickupAction.php index 58621e8fd..9002d81fc 100644 --- a/src/Controller/Cart/PickupAction.php +++ b/src/Controller/Cart/PickupAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\PickupCart; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\PickupCartRequest; use Sylius\ShopApiPlugin\ViewRepository\Cart\CartViewRepositoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; diff --git a/src/Controller/Cart/PutItemToCartAction.php b/src/Controller/Cart/PutItemToCartAction.php index 9319f94c2..fd8ca57b6 100644 --- a/src/Controller/Cart/PutItemToCartAction.php +++ b/src/Controller/Cart/PutItemToCartAction.php @@ -14,9 +14,6 @@ use Sylius\ShopApiPlugin\Normalizer\RequestCartTokenNormalizerInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; use Sylius\ShopApiPlugin\Request\CommandRequestInterface; -use Sylius\ShopApiPlugin\Request\PutOptionBasedConfigurableItemToCartRequest; -use Sylius\ShopApiPlugin\Request\PutSimpleItemToCartRequest; -use Sylius\ShopApiPlugin\Request\PutVariantBasedConfigurableItemToCartRequest; use Sylius\ShopApiPlugin\ViewRepository\Cart\CartViewRepositoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; diff --git a/src/Controller/Cart/RemoveCouponAction.php b/src/Controller/Cart/RemoveCouponAction.php index 666af81a1..56c917eb2 100644 --- a/src/Controller/Cart/RemoveCouponAction.php +++ b/src/Controller/Cart/RemoveCouponAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\RemoveCoupon; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\RemoveCouponRequest; use Sylius\ShopApiPlugin\ViewRepository\Cart\CartViewRepositoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; diff --git a/src/Controller/Cart/RemoveItemFromCartAction.php b/src/Controller/Cart/RemoveItemFromCartAction.php index 9e7949aac..1f731b9d8 100644 --- a/src/Controller/Cart/RemoveItemFromCartAction.php +++ b/src/Controller/Cart/RemoveItemFromCartAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\RemoveItemFromCart; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\RemoveItemFromCartRequest; use Sylius\ShopApiPlugin\ViewRepository\Cart\CartViewRepositoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; diff --git a/src/Controller/Checkout/AddressAction.php b/src/Controller/Checkout/AddressAction.php index 5f80238bc..03e2b5212 100644 --- a/src/Controller/Checkout/AddressAction.php +++ b/src/Controller/Checkout/AddressAction.php @@ -8,7 +8,7 @@ use FOS\RestBundle\View\ViewHandlerInterface; use League\Tactician\CommandBus; use Sylius\ShopApiPlugin\Command\AddressOrder; -use Sylius\ShopApiPlugin\Model\Address; +use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -20,19 +20,24 @@ final class AddressAction /** @var CommandBus */ private $bus; - public function __construct(ViewHandlerInterface $viewHandler, CommandBus $bus) - { + /** @var CommandRequestParserInterface */ + private $commandRequestParser; + + public function __construct( + ViewHandlerInterface $viewHandler, + CommandBus $bus, + CommandRequestParserInterface $commandRequestParser + ) { $this->viewHandler = $viewHandler; $this->bus = $bus; + $this->commandRequestParser = $commandRequestParser; } public function __invoke(Request $request): Response { - $this->bus->handle(new AddressOrder( - $request->attributes->get('token'), - Address::createFromArray($request->request->get('shippingAddress')), - Address::createFromArray($request->request->get('billingAddress') ?: $request->request->get('shippingAddress')) - )); + $commandRequest = $this->commandRequestParser->parse($request, AddressOrder::class); + + $this->bus->handle($commandRequest->getCommand()); return $this->viewHandler->handle(View::create(null, Response::HTTP_NO_CONTENT)); } diff --git a/src/Controller/Checkout/ChoosePaymentMethodAction.php b/src/Controller/Checkout/ChoosePaymentMethodAction.php index 427a18cc0..cdd271292 100644 --- a/src/Controller/Checkout/ChoosePaymentMethodAction.php +++ b/src/Controller/Checkout/ChoosePaymentMethodAction.php @@ -8,6 +8,7 @@ use FOS\RestBundle\View\ViewHandlerInterface; use League\Tactician\CommandBus; use Sylius\ShopApiPlugin\Command\ChoosePaymentMethod; +use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -19,19 +20,24 @@ final class ChoosePaymentMethodAction /** @var CommandBus */ private $bus; - public function __construct(ViewHandlerInterface $viewHandler, CommandBus $bus) - { + /** @var CommandRequestParserInterface */ + private $commandRequestParser; + + public function __construct( + ViewHandlerInterface $viewHandler, + CommandBus $bus, + CommandRequestParserInterface $commandRequestParser + ) { $this->viewHandler = $viewHandler; $this->bus = $bus; + $this->commandRequestParser = $commandRequestParser; } public function __invoke(Request $request): Response { - $this->bus->handle(new ChoosePaymentMethod( - $request->attributes->get('token'), - $request->attributes->get('paymentId'), - $request->request->get('method') - )); + $comandRequest = $this->commandRequestParser->parse($request, ChoosePaymentMethod::class); + + $this->bus->handle($comandRequest->getCommand()); return $this->viewHandler->handle(View::create(null, Response::HTTP_NO_CONTENT)); } diff --git a/src/Controller/Checkout/ChooseShippingMethodAction.php b/src/Controller/Checkout/ChooseShippingMethodAction.php index d569b7e9f..974bf8116 100644 --- a/src/Controller/Checkout/ChooseShippingMethodAction.php +++ b/src/Controller/Checkout/ChooseShippingMethodAction.php @@ -8,6 +8,7 @@ use FOS\RestBundle\View\ViewHandlerInterface; use League\Tactician\CommandBus; use Sylius\ShopApiPlugin\Command\ChooseShippingMethod; +use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -19,19 +20,24 @@ final class ChooseShippingMethodAction /** @var CommandBus */ private $bus; - public function __construct(ViewHandlerInterface $viewHandler, CommandBus $bus) - { + /** @var CommandRequestParserInterface */ + private $commandRequestParser; + + public function __construct( + ViewHandlerInterface $viewHandler, + CommandBus $bus, + CommandRequestParserInterface $commandRequestParser + ) { $this->viewHandler = $viewHandler; $this->bus = $bus; + $this->commandRequestParser = $commandRequestParser; } public function __invoke(Request $request): Response { - $this->bus->handle(new ChooseShippingMethod( - $request->attributes->get('token'), - $request->attributes->get('shippingId'), - $request->request->get('method') - )); + $commandRequest = $this->commandRequestParser->parse($request, ChooseShippingMethod::class); + + $this->bus->handle($commandRequest->getCommand()); return $this->viewHandler->handle(View::create(null, Response::HTTP_NO_CONTENT)); } diff --git a/src/Controller/Checkout/CompleteOrderAction.php b/src/Controller/Checkout/CompleteOrderAction.php index 9a96899da..afa70468e 100644 --- a/src/Controller/Checkout/CompleteOrderAction.php +++ b/src/Controller/Checkout/CompleteOrderAction.php @@ -9,6 +9,7 @@ use League\Tactician\CommandBus; use Sylius\ShopApiPlugin\Command\CompleteOrder; use Sylius\ShopApiPlugin\Exception\WrongUserException; +use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; use Sylius\ShopApiPlugin\Provider\LoggedInShopUserProviderInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -24,30 +25,29 @@ final class CompleteOrderAction /** @var LoggedInShopUserProviderInterface */ private $loggedInUserProvider; + /** @var CommandRequestParserInterface */ + private $commandRequestParser; + public function __construct( ViewHandlerInterface $viewHandler, CommandBus $bus, - LoggedInShopUserProviderInterface $loggedInUserProvider + LoggedInShopUserProviderInterface $loggedInUserProvider, + CommandRequestParserInterface $commandRequestParser ) { $this->viewHandler = $viewHandler; $this->bus = $bus; $this->loggedInUserProvider = $loggedInUserProvider; + $this->commandRequestParser = $commandRequestParser; } public function __invoke(Request $request): Response { - if ($this->loggedInUserProvider->isUserLoggedIn()) { - $defaultEmail = $this->loggedInUserProvider->provide()->getEmail(); - } + $this->setDefaultEmailOnRequestIfNeeded($request); + + $commandRequest = $this->commandRequestParser->parse($request, CompleteOrder::class); try { - $this->bus->handle( - new CompleteOrder( - $request->attributes->get('token'), - $request->request->get('email', $defaultEmail ?? null), - $request->request->get('notes') - ) - ); + $this->bus->handle($commandRequest->getCommand()); } catch (WrongUserException $notLoggedInException) { return $this->viewHandler->handle( View::create( @@ -59,4 +59,16 @@ public function __invoke(Request $request): Response return $this->viewHandler->handle(View::create(null, Response::HTTP_NO_CONTENT)); } + + private function setDefaultEmailOnRequestIfNeeded(Request $request): void + { + $defaultEmail = null; + if ($this->loggedInUserProvider->isUserLoggedIn()) { + $defaultEmail = $this->loggedInUserProvider->provide()->getEmail(); + } + + if (!$request->request->has('email')) { + $request->request->set('email', $defaultEmail); + } + } } diff --git a/src/Controller/Customer/RegisterCustomerAction.php b/src/Controller/Customer/RegisterCustomerAction.php index 97adb725c..e9f5efb21 100644 --- a/src/Controller/Customer/RegisterCustomerAction.php +++ b/src/Controller/Customer/RegisterCustomerAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\RegisterCustomer; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\RegisterCustomerRequest; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Validator\Validator\ValidatorInterface; diff --git a/src/Controller/Customer/RequestPasswordResettingAction.php b/src/Controller/Customer/RequestPasswordResettingAction.php index fa3821137..f0f9496ba 100644 --- a/src/Controller/Customer/RequestPasswordResettingAction.php +++ b/src/Controller/Customer/RequestPasswordResettingAction.php @@ -9,6 +9,7 @@ use League\Tactician\CommandBus; use Sylius\ShopApiPlugin\Command\GenerateResetPasswordToken; use Sylius\ShopApiPlugin\Command\SendResetPasswordToken; +use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -20,18 +21,23 @@ final class RequestPasswordResettingAction /** @var CommandBus */ private $bus; + /** @var CommandRequestParserInterface */ + private $commandRequestParser; + public function __construct( ViewHandlerInterface $viewHandler, - CommandBus $bus + CommandBus $bus, + CommandRequestParserInterface $commandRequestParser ) { $this->viewHandler = $viewHandler; $this->bus = $bus; + $this->commandRequestParser = $commandRequestParser; } public function __invoke(Request $request): Response { - $this->bus->handle(new GenerateResetPasswordToken($request->request->get('email'))); - $this->bus->handle(new SendResetPasswordToken($request->request->get('email'), $request->attributes->get('channelCode'))); + $this->bus->handle($this->commandRequestParser->parse($request, GenerateResetPasswordToken::class)->getCommand()); + $this->bus->handle($this->commandRequestParser->parse($request, SendResetPasswordToken::class)->getCommand()); return $this->viewHandler->handle(View::create(null, Response::HTTP_NO_CONTENT)); } diff --git a/src/Controller/Customer/ResendVerificationTokenAction.php b/src/Controller/Customer/ResendVerificationTokenAction.php index 4cc1d5528..ebfa90384 100644 --- a/src/Controller/Customer/ResendVerificationTokenAction.php +++ b/src/Controller/Customer/ResendVerificationTokenAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\SendVerificationToken; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\ResendVerificationTokenRequest; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Validator\Validator\ValidatorInterface; diff --git a/src/Controller/Customer/VerifyAccountAction.php b/src/Controller/Customer/VerifyAccountAction.php index 50890eef9..4c892fcbd 100644 --- a/src/Controller/Customer/VerifyAccountAction.php +++ b/src/Controller/Customer/VerifyAccountAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\VerifyAccount; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\VerifyAccountRequest; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Validator\Validator\ValidatorInterface; diff --git a/src/Controller/Product/AddReviewByCodeAction.php b/src/Controller/Product/AddReviewByCodeAction.php index 64e58e86e..e86a844ed 100644 --- a/src/Controller/Product/AddReviewByCodeAction.php +++ b/src/Controller/Product/AddReviewByCodeAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\AddProductReviewByCode; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\AddProductReviewByCodeRequest; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Validator\Validator\ValidatorInterface; diff --git a/src/Controller/Product/AddReviewBySlugAction.php b/src/Controller/Product/AddReviewBySlugAction.php index 6bc8fb04a..33f9f3bb7 100644 --- a/src/Controller/Product/AddReviewBySlugAction.php +++ b/src/Controller/Product/AddReviewBySlugAction.php @@ -10,7 +10,6 @@ use Sylius\ShopApiPlugin\Command\AddProductReviewBySlug; use Sylius\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface; use Sylius\ShopApiPlugin\Parser\CommandRequestParserInterface; -use Sylius\ShopApiPlugin\Request\AddProductReviewBySlugRequest; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Validator\Validator\ValidatorInterface; diff --git a/src/DependencyInjection/ShopApiExtension.php b/src/DependencyInjection/ShopApiExtension.php index b1da08fa2..97e26a92a 100644 --- a/src/DependencyInjection/ShopApiExtension.php +++ b/src/DependencyInjection/ShopApiExtension.php @@ -8,7 +8,6 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Extension\Extension; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; -use Symfony\Component\DependencyInjection\Reference; final class ShopApiExtension extends Extension { diff --git a/src/Request/AddressOrderRequest.php b/src/Request/AddressOrderRequest.php new file mode 100644 index 000000000..2f9fb1a99 --- /dev/null +++ b/src/Request/AddressOrderRequest.php @@ -0,0 +1,33 @@ +token = $request->attributes->get('token'); + $this->shippingAddress = Address::createFromArray($request->request->get('shippingAddress')); + $this->billingAddress = Address::createFromArray($request->request->get('billingAddress') ?: $request->request->get('shippingAddress')); + } + + public function getCommand(): object + { + return new AddressOrder($this->token, $this->shippingAddress, $this->billingAddress); + } +} diff --git a/src/Request/ChoosePaymentMethodRequest.php b/src/Request/ChoosePaymentMethodRequest.php new file mode 100644 index 000000000..25f359799 --- /dev/null +++ b/src/Request/ChoosePaymentMethodRequest.php @@ -0,0 +1,32 @@ +token = $request->attributes->get('token'); + $this->paymentId = $request->attributes->get('paymentId'); + $this->method = $request->request->get('method'); + } + + public function getCommand(): object + { + return new ChoosePaymentMethod($this->token, $this->paymentId, $this->method); + } +} diff --git a/src/Request/ChooseShippingMethodRequest.php b/src/Request/ChooseShippingMethodRequest.php new file mode 100644 index 000000000..362e81b1c --- /dev/null +++ b/src/Request/ChooseShippingMethodRequest.php @@ -0,0 +1,32 @@ +token = $request->attributes->get('token'); + $this->shippingId = $request->attributes->get('shippingId'); + $this->method = $request->request->get('method'); + } + + public function getCommand(): object + { + return new ChooseShippingMethod($this->token, $this->shippingId, $this->method); + } +} diff --git a/src/Request/CompleteOrderRequest.php b/src/Request/CompleteOrderRequest.php new file mode 100644 index 000000000..916a5cf71 --- /dev/null +++ b/src/Request/CompleteOrderRequest.php @@ -0,0 +1,32 @@ +token = $request->attributes->get('token'); + $this->email = $request->request->get('email'); + $this->notes = $request->request->get('notes'); + } + + public function getCommand(): object + { + return new CompleteOrder($this->token, $this->email, $this->notes); + } +} diff --git a/src/Request/GenerateResetPasswordTokenRequest.php b/src/Request/GenerateResetPasswordTokenRequest.php new file mode 100644 index 000000000..1ef734c17 --- /dev/null +++ b/src/Request/GenerateResetPasswordTokenRequest.php @@ -0,0 +1,24 @@ +email = $request->request->get('email'); + } + + public function getCommand(): object + { + return new GenerateResetPasswordToken($this->email); + } +} diff --git a/src/Request/SendResetPasswordTokenRequest.php b/src/Request/SendResetPasswordTokenRequest.php new file mode 100644 index 000000000..380712d0e --- /dev/null +++ b/src/Request/SendResetPasswordTokenRequest.php @@ -0,0 +1,28 @@ +email = $request->request->get('email'); + $this->channelCode = $request->attributes->get('channelCode'); + } + + public function getCommand(): object + { + return new SendResetPasswordToken($this->email, $this->channelCode); + } +} diff --git a/src/Resources/config/services/actions/checkout.xml b/src/Resources/config/services/actions/checkout.xml index e1d31ef66..3b8a09f1b 100644 --- a/src/Resources/config/services/actions/checkout.xml +++ b/src/Resources/config/services/actions/checkout.xml @@ -9,6 +9,7 @@ > + + + + diff --git a/src/Resources/config/services/actions/customer.xml b/src/Resources/config/services/actions/customer.xml index dbf018200..3bfe11c67 100644 --- a/src/Resources/config/services/actions/customer.xml +++ b/src/Resources/config/services/actions/customer.xml @@ -39,6 +39,7 @@ > + + + + + - + @@ -19,6 +23,7 @@ +