Skip to content

Commit

Permalink
✨add optional filter for get requests (#414)
Browse files Browse the repository at this point in the history
✨add optional filter for get requests
✨introduce new extension bundle
  • Loading branch information
julianzimmermann committed Jul 18, 2023
1 parent aa4d23d commit 2329380
Show file tree
Hide file tree
Showing 14 changed files with 421 additions and 84 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
],
"require": {
"php": ">=8.0",
"fond-of-oryx/representative-company-user-trade-fair": "^1.0.0",
"fond-of-oryx/representative-company-user-trade-fair": "^1.1.0",
"fond-of-spryker/company-type": "dev-master",
"spryker/glue-application": "*"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
namespace FondOfOryx\Glue\RepresentativeCompanyUserTradeFairRestApi\Processor\Builder;

use FondOfOryx\Glue\RepresentativeCompanyUserTradeFairRestApi\RepresentativeCompanyUserTradeFairRestApiConfig;
use Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairCollectionTransfer;
use Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairTransfer;
use Generated\Shared\Transfer\RestErrorMessageTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairResponseTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairTransfer;
use Spryker\Glue\GlueApplication\Rest\JsonApi\RestResourceBuilderInterface;
use Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface;

Expand All @@ -26,12 +26,12 @@ public function __construct(
}

/**
* @param \Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairTransfer $representativeCompanyUserTradeFairTransfer
* @param \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairTransfer $representativeCompanyUserTradeFairTransfer
*
* @return \Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface
*/
public function buildRepresentativeCompanyUserTradeFairRestResponse(
RepresentativeCompanyUserTradeFairTransfer $representativeCompanyUserTradeFairTransfer
RestRepresentativeCompanyUserTradeFairTransfer $representativeCompanyUserTradeFairTransfer
): RestResponseInterface {
$restResponse = $this->restResourceBuilder->createRestResponse();

Expand All @@ -45,12 +45,12 @@ public function buildRepresentativeCompanyUserTradeFairRestResponse(
}

/**
* @param \Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairCollectionTransfer $representativeCompanyUserTradeFairTransfer
* @param \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairResponseTransfer $representativeCompanyUserTradeFairTransfer
*
* @return \Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface
*/
public function buildRepresentativeCompanyUserTradeFairCollectionRestResponse(
RepresentativeCompanyUserTradeFairCollectionTransfer $representativeCompanyUserTradeFairTransfer
RestRepresentativeCompanyUserTradeFairResponseTransfer $representativeCompanyUserTradeFairTransfer
): RestResponseInterface {
$restResponse = $this->restResourceBuilder->createRestResponse();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,28 @@

namespace FondOfOryx\Glue\RepresentativeCompanyUserTradeFairRestApi\Processor\Builder;

use Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairCollectionTransfer;
use Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairResponseTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairTransfer;
use Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface;

interface RestResponseBuilderInterface
{
/**
* @param \Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairTransfer $representativeCompanyUserTradeFairTransfer
* @param \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairTransfer $representativeCompanyUserTradeFairTransfer
*
* @return \Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface
*/
public function buildRepresentativeCompanyUserTradeFairRestResponse(
RepresentativeCompanyUserTradeFairTransfer $representativeCompanyUserTradeFairTransfer
RestRepresentativeCompanyUserTradeFairTransfer $representativeCompanyUserTradeFairTransfer
): RestResponseInterface;

/**
* @param \Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairCollectionTransfer $representativeCompanyUserTradeFairTransfer
* @param \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairResponseTransfer $representativeCompanyUserTradeFairTransfer
*
* @return \Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface
*/
public function buildRepresentativeCompanyUserTradeFairCollectionRestResponse(
RepresentativeCompanyUserTradeFairCollectionTransfer $representativeCompanyUserTradeFairTransfer
RestRepresentativeCompanyUserTradeFairResponseTransfer $representativeCompanyUserTradeFairTransfer
): RestResponseInterface;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public function get(RestRequestInterface $restRequest): RestResponseInterface
->createRestErrorResponse($representationRestResponseTransfer->getError(), RepresentativeCompanyUserTradeFairRestApiConstants::HTTP_CODE_VALIDATION_ERRORS);
}

return $this->responseBuilder->buildRepresentativeCompanyUserTradeFairCollectionRestResponse($representationRestResponseTransfer->getCollection());
return $this->responseBuilder->buildRepresentativeCompanyUserTradeFairCollectionRestResponse($representationRestResponseTransfer);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,14 @@

namespace FondOfOryx\Glue\RepresentativeCompanyUserTradeFairRestApi\Processor\Mapper;

use ArrayObject;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairAttributesTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairFilterPageTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairFilterSortTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairFilterTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairRequestTransfer;
use Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface;
use Spryker\Glue\GlueApplication\Rest\Request\Data\SortInterface;
use Symfony\Component\HttpFoundation\Request;

class RepresentationMapper implements RepresentationMapperInterface
Expand Down Expand Up @@ -33,7 +38,8 @@ public function createRequest(
}

return (new RestRepresentativeCompanyUserTradeFairRequestTransfer())
->setAttributes($attributesTransfer);
->setAttributes($attributesTransfer)
->setFilter($this->createFilterFromRequest($restRequest));
}

/**
Expand Down Expand Up @@ -78,4 +84,69 @@ protected function getUuid(RestRequestInterface $restRequest): ?string

return null;
}

/**
* @param \Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface $restRequest
*
* @return \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairFilterTransfer
*/
public function createFilterFromRequest(RestRequestInterface $restRequest): RestRepresentativeCompanyUserTradeFairFilterTransfer
{
$queryData = $restRequest->getHttpRequest()->query;
$data = [];
if ($queryData->count() > 0) {
$data = $queryData->all();
unset($data['page'], $data['sort']);
}

return (new RestRepresentativeCompanyUserTradeFairFilterTransfer())
->fromArray($data, true)
->setSort($this->recreateSortFilter($restRequest))
->setPage($this->recreatePageFilter($restRequest));
}

/**
* @param \Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface $restRequest
*
* @return \ArrayObject<\Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairFilterSortTransfer>
*/
public function recreateSortFilter(RestRequestInterface $restRequest): ArrayObject
{
$sortFilter = new ArrayObject();

foreach ($restRequest->getSort() as $index => $sort) {
$override = explode('_', $sort->getField());
$direction = strtoupper(array_pop($override));
$sortTransfer = (new RestRepresentativeCompanyUserTradeFairFilterSortTransfer())
->setField($sort->getField())
->setDirection($sort->getDirection());

if ($direction === SortInterface::SORT_ASC || $direction === SortInterface::SORT_DESC) {
$sortTransfer
->setField(implode('_', $override))
->setDirection($direction);
}

$sortFilter->append($sortTransfer);
}

return $sortFilter;
}

/**
* @param \Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface $restRequest
*
* @return \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairFilterPageTransfer|null
*/
public function recreatePageFilter(RestRequestInterface $restRequest): ?RestRepresentativeCompanyUserTradeFairFilterPageTransfer
{
$page = $restRequest->getPage();
if ($page === null) {
return null;
}

return (new RestRepresentativeCompanyUserTradeFairFilterPageTransfer())
->setLimit($page->getLimit())
->setOffset($page->getOffset());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,60 @@

<transfer name="RestRepresentativeCompanyUserTradeFairRequest">
<property name="attributes" type="RestRepresentativeCompanyUserTradeFairAttributes"/>
<property name="filter" type="RestRepresentativeCompanyUserTradeFairFilter"/>
</transfer>

<transfer name="RestRepresentativeCompanyUserTradeFairFilter">
<property name="active" type="bool"/>
<property name="representative" type="string"/>
<property name="page" type="RestRepresentativeCompanyUserTradeFairFilterPage" />
<property name="sort" type="RestRepresentativeCompanyUserTradeFairFilterSort[]" />
</transfer>

<transfer name="RestRepresentativeCompanyUserTradeFairFilterSort">
<property name="field" type="string"/>
<property name="direction" type="string"/>
</transfer>

<transfer name="RestRepresentativeCompanyUserTradeFairFilterPage">
<property name="offset" type="int"/>
<property name="limit" type="int"/>
</transfer>

<transfer name="RestRepresentativeCompanyUserTradeFairResponse">
<property name="isSuccessful" type="bool"/>
<property name="error" type="string" />
<property name="request" type="RestRepresentativeCompanyUserTradeFairRequest"/>
<property name="representation" type="RepresentativeCompanyUserTradeFair"/>
<property name="collection" type="RepresentativeCompanyUserTradeFairCollection"/>
<property name="representation" type="RestRepresentativeCompanyUserTradeFair"/>
<property name="collection" type="RestRepresentativeCompanyUserTradeFairCollection"/>
<property name="pagination" type="RestRepresentativeCompanyUserPagination"/>
</transfer>

<transfer name="RestRepresentativeCompanyUserPagination">
<property name="numFound" type="int" />
<property name="currentPage" type="int" />
<property name="maxPage" type="int" />
<property name="currentItemsPerPage" type="int" />
</transfer>

<transfer name="RestRepresentativeCompanyUserTradeFair">
<property name="representativeCompanyUser" type="RestRepresentativeCompanyUser[]" />
<property name="distributor" type="RestRepresentativeDistributor" />
<property name="name" type="string" />
<property name="startAt" type="string" />
<property name="endAt" type="string" />
<property name="active" type="bool" />
<property name="uuid" type="string" />
<property name="createdAt" type="int" />
<property name="updatedAt" type="int" />
</transfer>

<transfer name="RestRepresentativeCompanyUserTradeFairCollection">
<property name="representations" singular="representation" type="RestRepresentativeCompanyUserTradeFair[]" />
</transfer>

<transfer name="RepresentativeCompanyUserTradeFair" />
<transfer name="RepresentativeCompanyUserTradeFairCollection" />
<transfer name="RepresentativeCompanyUserTradeFairCommand" />
<transfer name="RepresentativeCompanyUserTradeFairFilter" />
<transfer name="RestRepresentativeDistributor" />
</transfers>
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

namespace FondOfOryx\Zed\RepresentativeCompanyUserTradeFairRestApi\Business\Model\Mapper;

use Generated\Shared\Transfer\CustomerTransfer;
use Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairCollectionTransfer;
use Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairCollectionTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairTransfer;
use Generated\Shared\Transfer\RestRepresentativeDistributorTransfer;

class RestDataMapper implements RestDataMapperInterface
{
/**
* @param \Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairTransfer $companyUserTransfer
*
* @return \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairTransfer
*/
public function mapResponse(RepresentativeCompanyUserTradeFairTransfer $companyUserTransfer): RestRepresentativeCompanyUserTradeFairTransfer
{
return (new RestRepresentativeCompanyUserTradeFairTransfer())
->fromArray($companyUserTransfer->toArray(), true)
->setDistributor($this->mapRestRepresentativeDistributor($companyUserTransfer->getDistributor()));
}

/**
* @param \Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairCollectionTransfer $companyUserCollectionTransfer
*
* @return \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairCollectionTransfer
*/
public function mapResponseCollection(
RepresentativeCompanyUserTradeFairCollectionTransfer $companyUserCollectionTransfer
): RestRepresentativeCompanyUserTradeFairCollectionTransfer {
$restResponseCollection = new RestRepresentativeCompanyUserTradeFairCollectionTransfer();

foreach ($companyUserCollectionTransfer->getRepresentations() as $representation) {
$restResponseCollection->addRepresentation($this->mapResponse($representation));
}

return $restResponseCollection;
}

/**
* @param \Generated\Shared\Transfer\CustomerTransfer|null $customerTransfer
*
* @return \Generated\Shared\Transfer\RestRepresentativeDistributorTransfer|null
*/
protected function mapRestRepresentativeDistributor(?CustomerTransfer $customerTransfer): ?RestRepresentativeDistributorTransfer
{
if ($customerTransfer === null) {
return null;
}

return (new RestRepresentativeDistributorTransfer())
->fromArray($customerTransfer->toArray(), true);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace FondOfOryx\Zed\RepresentativeCompanyUserTradeFairRestApi\Business\Model\Mapper;

use Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairCollectionTransfer;
use Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairCollectionTransfer;
use Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairTransfer;

interface RestDataMapperInterface
{
/**
* @param \Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairTransfer $companyUserTransfer
*
* @return \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairTransfer
*/
public function mapResponse(RepresentativeCompanyUserTradeFairTransfer $companyUserTransfer): RestRepresentativeCompanyUserTradeFairTransfer;

/**
* @param \Generated\Shared\Transfer\RepresentativeCompanyUserTradeFairCollectionTransfer $companyUserCollectionTransfer
*
* @return \Generated\Shared\Transfer\RestRepresentativeCompanyUserTradeFairCollectionTransfer
*/
public function mapResponseCollection(
RepresentativeCompanyUserTradeFairCollectionTransfer $companyUserCollectionTransfer
): RestRepresentativeCompanyUserTradeFairCollectionTransfer;
}

0 comments on commit 2329380

Please sign in to comment.