Skip to content

Commit 08743e0

Browse files
authoredOct 29, 2021
CC-12637: Support configurable products in the wish list. (#8644)
CC-12637 Support configurable products in the wish list
1 parent a9fa6b9 commit 08743e0

27 files changed

+773
-12
lines changed
 

‎composer.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
"spryker/kernel": "^3.30.0",
1111
"spryker/propel-orm": "^1.0.0",
1212
"spryker/symfony": "^3.0.0",
13+
"spryker/transfer": "^3.25.0",
1314
"spryker/uuid-behavior": "^1.0.0",
14-
"spryker/wishlist": "^6.5.0 || ^8.1.0",
15-
"spryker/wishlists-rest-api-extension": "^1.0.0",
15+
"spryker/wishlist": "^6.6.0 || ^8.6.0",
16+
"spryker/wishlists-rest-api-extension": "^1.1.0",
1617
"spryker/zed-request": "^3.0.0"
1718
},
1819
"require-dev": {

‎dependency.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"include": {
3+
"spryker/transfer": "Provides transfer objects definition with `::get*OrFail()` functionality."
4+
}
5+
}

‎phpstan.neon

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
parameters:
2+
checkGenericClassInNonGenericObjectType: false
23
checkMissingIterableValueType: false
34
ignoreErrors:

‎src/Spryker/Client/WishlistsRestApi/WishlistsRestApiClient.php

+14
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,18 @@ public function deleteWishlistItem(WishlistItemRequestTransfer $wishlistItemRequ
7474
{
7575
return $this->getFactory()->createZedStub()->deleteWishlistItem($wishlistItemRequestTransfer);
7676
}
77+
78+
/**
79+
* {@inheritDoc}
80+
*
81+
* @api
82+
*
83+
* @param \Generated\Shared\Transfer\WishlistItemRequestTransfer $wishlistItemRequestTransfer
84+
*
85+
* @return \Generated\Shared\Transfer\WishlistItemResponseTransfer
86+
*/
87+
public function updateWishlistItem(WishlistItemRequestTransfer $wishlistItemRequestTransfer): WishlistItemResponseTransfer
88+
{
89+
return $this->getFactory()->createZedStub()->updateWishlistItem($wishlistItemRequestTransfer);
90+
}
7791
}

‎src/Spryker/Client/WishlistsRestApi/WishlistsRestApiClientInterface.php

+19
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,23 @@ public function addWishlistItem(WishlistItemRequestTransfer $wishlistItemRequest
8080
* @return \Generated\Shared\Transfer\WishlistItemResponseTransfer
8181
*/
8282
public function deleteWishlistItem(WishlistItemRequestTransfer $wishlistItemRequestTransfer): WishlistItemResponseTransfer;
83+
84+
/**
85+
* Specification:
86+
* - Makes Zed request.
87+
* - Requires uuid, uuidWishlist, sku to be set on `WishlistItemRequestTransfer`.
88+
* - Looks up the wishlist by uuid.
89+
* - Executes `RestWishlistItemsAttributesUpdateStrategyPluginInterface` plugin stack.
90+
* - Looks up the wishlist item by sku.
91+
* - Updates product in the wishlist.
92+
* - Returns `WishlistItemResponseTransfer.isSuccessful = true` on successful update.
93+
* - Returns `WishlistItemResponseTransfer.isSuccessful = false` if the wishlist was not found by sku or the item is not found in the wishlist.
94+
*
95+
* @api
96+
*
97+
* @param \Generated\Shared\Transfer\WishlistItemRequestTransfer $wishlistItemRequestTransfer
98+
*
99+
* @return \Generated\Shared\Transfer\WishlistItemResponseTransfer
100+
*/
101+
public function updateWishlistItem(WishlistItemRequestTransfer $wishlistItemRequestTransfer): WishlistItemResponseTransfer;
83102
}

‎src/Spryker/Client/WishlistsRestApi/Zed/WishlistsRestApiStub.php

+18
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,22 @@ public function deleteWishlistItem(WishlistItemRequestTransfer $wishlistItemRequ
100100

101101
return $wishlistItemResponseTransfer;
102102
}
103+
104+
/**
105+
* @uses \Spryker\Zed\WishlistsRestApi\Communication\Controller\GatewayController::updateWishlistItemAction()
106+
*
107+
* @param \Generated\Shared\Transfer\WishlistItemRequestTransfer $wishlistItemRequestTransfer
108+
*
109+
* @return \Generated\Shared\Transfer\WishlistItemResponseTransfer
110+
*/
111+
public function updateWishlistItem(WishlistItemRequestTransfer $wishlistItemRequestTransfer): WishlistItemResponseTransfer
112+
{
113+
/** @var \Generated\Shared\Transfer\WishlistItemResponseTransfer $wishlistItemResponseTransfer */
114+
$wishlistItemResponseTransfer = $this->zedStubClient->call(
115+
'/wishlists-rest-api/gateway/update-wishlist-item',
116+
$wishlistItemRequestTransfer,
117+
);
118+
119+
return $wishlistItemResponseTransfer;
120+
}
103121
}

‎src/Spryker/Client/WishlistsRestApi/Zed/WishlistsRestApiStubInterface.php

+7
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,11 @@ public function addWishlistItem(WishlistItemRequestTransfer $wishlistItemRequest
4242
* @return \Generated\Shared\Transfer\WishlistItemResponseTransfer
4343
*/
4444
public function deleteWishlistItem(WishlistItemRequestTransfer $wishlistItemRequestTransfer): WishlistItemResponseTransfer;
45+
46+
/**
47+
* @param \Generated\Shared\Transfer\WishlistItemRequestTransfer $wishlistItemRequestTransfer
48+
*
49+
* @return \Generated\Shared\Transfer\WishlistItemResponseTransfer
50+
*/
51+
public function updateWishlistItem(WishlistItemRequestTransfer $wishlistItemRequestTransfer): WishlistItemResponseTransfer;
4552
}

‎src/Spryker/Glue/WishlistsRestApi/Controller/WishlistItemsResourceController.php

+33
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,37 @@ public function postAction(
7474
->createWishlistItemAdder()
7575
->add($restWishlistItemsAttributesTransfer, $restRequest);
7676
}
77+
78+
/**
79+
* @Glue({
80+
* "patch": {
81+
* "path": "/wishlists/{wishlistId}/wishlist-items/{wishlistItemId}",
82+
* "summary": [
83+
* "Updates the wishlist item."
84+
* ],
85+
* "parameters": [{
86+
* "ref": "acceptLanguage"
87+
* }],
88+
* "responses": {
89+
* "403": "Unauthorized request.",
90+
* "404": "Wishlist not found.",
91+
* "422": "Cannot update the wishlist list item."
92+
* },
93+
* "responseAttributesClassName": "\\Generated\\Shared\\Transfer\\RestWishlistItemsAttributesTransfer"
94+
* }
95+
* })
96+
*
97+
* @param \Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface $restRequest
98+
* @param \Generated\Shared\Transfer\RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesTransfer
99+
*
100+
* @return \Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface
101+
*/
102+
public function patchAction(
103+
RestRequestInterface $restRequest,
104+
RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesTransfer
105+
): RestResponseInterface {
106+
return $this->getFactory()
107+
->createWishlistItemUpdater()
108+
->update($restRequest, $restWishlistItemsAttributesTransfer);
109+
}
77110
}

‎src/Spryker/Glue/WishlistsRestApi/Plugin/WishlistItemsResourceRoutePlugin.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ class WishlistItemsResourceRoutePlugin extends AbstractPlugin implements Resourc
3131
public function configure(ResourceRouteCollectionInterface $resourceRouteCollection): ResourceRouteCollectionInterface
3232
{
3333
$resourceRouteCollection->addPost('post')
34-
->addDelete('delete');
34+
->addDelete('delete')
35+
->addPatch('patch');
3536

3637
return $resourceRouteCollection;
3738
}

‎src/Spryker/Glue/WishlistsRestApi/Processor/Mapper/WishlistItemMapper.php

+52-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace Spryker\Glue\WishlistsRestApi\Processor\Mapper;
99

1010
use Generated\Shared\Transfer\RestWishlistItemsAttributesTransfer;
11+
use Generated\Shared\Transfer\WishlistItemRequestTransfer;
1112
use Generated\Shared\Transfer\WishlistItemTransfer;
1213

1314
class WishlistItemMapper implements WishlistItemMapperInterface
@@ -17,12 +18,21 @@ class WishlistItemMapper implements WishlistItemMapperInterface
1718
*/
1819
protected $restWishlistItemsAttributesMapperPlugins;
1920

21+
/**
22+
* @var array<\Spryker\Glue\WishlistsRestApiExtension\Dependency\Plugin\WishlistItemRequestMapperPluginInterface>
23+
*/
24+
protected $wishlistItemRequestMapperPlugins;
25+
2026
/**
2127
* @param array<\Spryker\Glue\WishlistsRestApiExtension\Dependency\Plugin\RestWishlistItemsAttributesMapperPluginInterface> $restWishlistItemsAttributesMapperPlugins
28+
* @param array<\Spryker\Glue\WishlistsRestApiExtension\Dependency\Plugin\WishlistItemRequestMapperPluginInterface> $wishlistItemRequestMapperPlugins
2229
*/
23-
public function __construct(array $restWishlistItemsAttributesMapperPlugins = [])
24-
{
30+
public function __construct(
31+
array $restWishlistItemsAttributesMapperPlugins = [],
32+
array $wishlistItemRequestMapperPlugins = []
33+
) {
2534
$this->restWishlistItemsAttributesMapperPlugins = $restWishlistItemsAttributesMapperPlugins;
35+
$this->wishlistItemRequestMapperPlugins = $wishlistItemRequestMapperPlugins;
2636
}
2737

2838
/**
@@ -45,6 +55,26 @@ public function mapWishlistItemTransferToRestWishlistItemsAttributes(
4555
return $restWishlistItemsAttributesTransfer;
4656
}
4757

58+
/**
59+
* @param \Generated\Shared\Transfer\RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesRequestTransfer
60+
* @param \Generated\Shared\Transfer\WishlistItemRequestTransfer $wishlistItemRequestTransfer
61+
*
62+
* @return \Generated\Shared\Transfer\WishlistItemRequestTransfer
63+
*/
64+
public function mapRestWishlistItemsAttributesToWishlistItemRequest(
65+
RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesRequestTransfer,
66+
WishlistItemRequestTransfer $wishlistItemRequestTransfer
67+
): WishlistItemRequestTransfer {
68+
$wishlistItemRequestTransfer
69+
->fromArray($restWishlistItemsAttributesRequestTransfer->toArray(), true)
70+
->setSku($restWishlistItemsAttributesRequestTransfer->getSku());
71+
72+
return $this->executeWishlistItemRequestMapperPlugins(
73+
$restWishlistItemsAttributesRequestTransfer,
74+
$wishlistItemRequestTransfer,
75+
);
76+
}
77+
4878
/**
4979
* @param \Generated\Shared\Transfer\WishlistItemTransfer $wishlistItemTransfer
5080
* @param \Generated\Shared\Transfer\RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesTransfer
@@ -64,4 +94,24 @@ protected function executeRestWishlistItemsAttributesMapperPlugins(
6494

6595
return $restWishlistItemsAttributesTransfer;
6696
}
97+
98+
/**
99+
* @param \Generated\Shared\Transfer\RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesRequestTransfer
100+
* @param \Generated\Shared\Transfer\WishlistItemRequestTransfer $wishlistItemRequestTransfer
101+
*
102+
* @return \Generated\Shared\Transfer\WishlistItemRequestTransfer
103+
*/
104+
protected function executeWishlistItemRequestMapperPlugins(
105+
RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesRequestTransfer,
106+
WishlistItemRequestTransfer $wishlistItemRequestTransfer
107+
): WishlistItemRequestTransfer {
108+
foreach ($this->wishlistItemRequestMapperPlugins as $wishlistItemRequestMapperPlugin) {
109+
$wishlistItemRequestTransfer = $wishlistItemRequestMapperPlugin->map(
110+
$restWishlistItemsAttributesRequestTransfer,
111+
$wishlistItemRequestTransfer,
112+
);
113+
}
114+
115+
return $wishlistItemRequestTransfer;
116+
}
67117
}

‎src/Spryker/Glue/WishlistsRestApi/Processor/Mapper/WishlistItemMapperInterface.php

+12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace Spryker\Glue\WishlistsRestApi\Processor\Mapper;
99

1010
use Generated\Shared\Transfer\RestWishlistItemsAttributesTransfer;
11+
use Generated\Shared\Transfer\WishlistItemRequestTransfer;
1112
use Generated\Shared\Transfer\WishlistItemTransfer;
1213

1314
interface WishlistItemMapperInterface
@@ -22,4 +23,15 @@ public function mapWishlistItemTransferToRestWishlistItemsAttributes(
2223
WishlistItemTransfer $wishlistItemTransfer,
2324
RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesTransfer
2425
): RestWishlistItemsAttributesTransfer;
26+
27+
/**
28+
* @param \Generated\Shared\Transfer\RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesRequestTransfer
29+
* @param \Generated\Shared\Transfer\WishlistItemRequestTransfer $wishlistItemRequestTransfer
30+
*
31+
* @return \Generated\Shared\Transfer\WishlistItemRequestTransfer
32+
*/
33+
public function mapRestWishlistItemsAttributesToWishlistItemRequest(
34+
RestWishlistItemsAttributesTransfer $restWishlistItemsAttributesRequestTransfer,
35+
WishlistItemRequestTransfer $wishlistItemRequestTransfer
36+
): WishlistItemRequestTransfer;
2537
}

‎src/Spryker/Glue/WishlistsRestApi/Processor/WishlistItems/WishlistItemAdder.php

+15-6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Spryker\Glue\GlueApplication\Rest\JsonApi\RestResourceInterface;
1414
use Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface;
1515
use Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface;
16+
use Spryker\Glue\WishlistsRestApi\Processor\Mapper\WishlistItemMapperInterface;
1617
use Spryker\Glue\WishlistsRestApi\Processor\RestResponseBuilder\WishlistRestResponseBuilderInterface;
1718
use Spryker\Glue\WishlistsRestApi\WishlistsRestApiConfig;
1819

@@ -28,16 +29,24 @@ class WishlistItemAdder implements WishlistItemAdderInterface
2829
*/
2930
protected $wishlistRestResponseBuilder;
3031

32+
/**
33+
* @var \Spryker\Glue\WishlistsRestApi\Processor\Mapper\WishlistItemMapperInterface
34+
*/
35+
protected $wishlistItemMapper;
36+
3137
/**
3238
* @param \Spryker\Client\WishlistsRestApi\WishlistsRestApiClientInterface $wishlistRestApiClient
3339
* @param \Spryker\Glue\WishlistsRestApi\Processor\RestResponseBuilder\WishlistRestResponseBuilderInterface $wishlistRestResponseBuilder
40+
* @param \Spryker\Glue\WishlistsRestApi\Processor\Mapper\WishlistItemMapperInterface $wishlistItemMapper
3441
*/
3542
public function __construct(
3643
WishlistsRestApiClientInterface $wishlistRestApiClient,
37-
WishlistRestResponseBuilderInterface $wishlistRestResponseBuilder
44+
WishlistRestResponseBuilderInterface $wishlistRestResponseBuilder,
45+
WishlistItemMapperInterface $wishlistItemMapper
3846
) {
3947
$this->wishlistRestApiClient = $wishlistRestApiClient;
4048
$this->wishlistRestResponseBuilder = $wishlistRestResponseBuilder;
49+
$this->wishlistItemMapper = $wishlistItemMapper;
4150
}
4251

4352
/**
@@ -90,11 +99,11 @@ protected function createWishlistItemRequest(
9099

91100
$wishlistItemRequestTransfer = (new WishlistItemRequestTransfer())
92101
->setIdCustomer($restUser->getSurrogateIdentifier())
93-
->setUuidWishlist($wishlistResource->getId())
94-
->setSku($restWishlistItemsAttributesRequestTransfer->getSku());
102+
->setUuidWishlist($wishlistResource->getId());
95103

96-
$wishlistItemRequestTransfer->fromArray($restWishlistItemsAttributesRequestTransfer->toArray(), true);
97-
98-
return $wishlistItemRequestTransfer;
104+
return $this->wishlistItemMapper->mapRestWishlistItemsAttributesToWishlistItemRequest(
105+
$restWishlistItemsAttributesRequestTransfer,
106+
$wishlistItemRequestTransfer,
107+
);
99108
}
100109
}

0 commit comments

Comments
 (0)