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 @@
+