1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
<?php
namespace Commercetools\Core\Request\InStores;
use Commercetools\Core\Client;
use Commercetools\Core\Error\InvalidArgumentException;
use Commercetools\Core\Model\Common\Context;
use Commercetools\Core\Model\MapperInterface;
use Commercetools\Core\Request\ClientRequestInterface;
use Commercetools\Core\Response\ApiResponseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
class InStoreRequestDecorator implements ClientRequestInterface
{
private $request;
private $endpoint;
public function __construct($storeKey, ClientRequestInterface $request)
{
if (!InStoreRequests::of()->can(get_class($request))) {
throw new InvalidArgumentException('In-store request is not available in: ' . get_class($request));
}
$this->request = $request;
$this->endpoint = InStoreEndpoint::endpoint($storeKey);
}
public function getIdentifier()
{
return $this->request->getIdentifier();
}
public function setIdentifier($identifier)
{
return $this->request->setIdentifier($identifier);
}
public function httpRequest()
{
return $this->decorateUri($this->request->httpRequest());
}
private function decorateUri(RequestInterface $request)
{
return $request->withUri($request->getUri()->withPath($this->endpoint . $request->getUri()->getPath()));
}
public function buildResponse(ResponseInterface $response)
{
return $this->request->buildResponse($response);
}
public function mapResult(array $result, Context $context = null)
{
return $this->request->mapResult($result, $context);
}
public function mapResponse(ApiResponseInterface $response)
{
return $this->request->mapResponse($response);
}
public function map(array $data, Context $context = null, MapperInterface $mapper = null)
{
return $this->request->map($data, $context, $mapper);
}
public function mapFromResponse($response, MapperInterface $mapper = null)
{
return $this->request->mapFromResponse($response, $mapper);
}
public function executeWithClient(Client $client, array $headers = null)
{
return $client->execute($this, $headers);
}
public static function ofStoreKeyAndRequest($storeKey, ClientRequestInterface $request)
{
return new static($storeKey, $request);
}
}