commerce_api-8.x-1.x-dev/src/Resource/Wishlist/WishlistRemoveItemResource.php
src/Resource/Wishlist/WishlistRemoveItemResource.php
<?php namespace Drupal\commerce_api\Resource\Wishlist; use Drupal\commerce_wishlist\Entity\WishlistInterface; use Drupal\commerce_wishlist\Entity\WishlistItemInterface; use Drupal\commerce_wishlist\WishlistItemStorageInterface; use Drupal\jsonapi\JsonApiResource\ResourceIdentifier; use Drupal\jsonapi\ResourceResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException; final class WishlistRemoveItemResource extends WishlistResourceBase { /** * DELETE a wishlist item from a wishlist. * * @param \Symfony\Component\HttpFoundation\Request $request * The request. * @param \Drupal\commerce_wishlist\Entity\WishlistInterface $commerce_wishlist * The wishlist. * @param array $_wishlist_item_resource_types * The wishlist item resource types. * * @return \Drupal\jsonapi\ResourceResponse * The response. * * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ public function process(Request $request, WishlistInterface $commerce_wishlist, array $_wishlist_item_resource_types = []): ResourceResponse { $resource_type = $this->getGeneralizedWishlistResourceType($_wishlist_item_resource_types); $wishlist_item_storage = $this->entityTypeManager->getStorage('commerce_wishlist_item'); assert($wishlist_item_storage instanceof WishlistItemStorageInterface); /** @var \Drupal\jsonapi\JsonApiResource\ResourceIdentifier[] $resource_identifiers */ $resource_identifiers = $this->inner->deserialize($resource_type, $request, ResourceIdentifier::class, 'wishlist_items'); foreach ($resource_identifiers as $resource_identifier) { $wishlist_items = $wishlist_item_storage->loadByProperties(['uuid' => $resource_identifier->getId()]); $wishlist_item = reset($wishlist_items); if (!$wishlist_item instanceof WishlistItemInterface || !$commerce_wishlist->hasItem($wishlist_item)) { throw new UnprocessableEntityHttpException(sprintf('Wishlist item %s does not exist for wishlist %s.', $resource_identifier->getId(), $commerce_wishlist->uuid())); } $this->wishlistManager->removeWishlistItem($commerce_wishlist, $wishlist_item); } return new ResourceResponse(NULL, 204); } }