<?php
namespace App\V4\DataProvider\Section;
use App\DataProvider\AbstractCollectionDataProvider;
use App\Listing\Transformer\ListingResponseTransformerInterface;
use App\Service\ApiWebService;
use App\Service\ApiWebServiceFilterBuilder\FilterBuildersChain;
use App\Service\Cache\CacheManager;
use App\Service\Provider\ApiUserProvider;
use App\V4\Model\Section\Section;
use App\V4\Repository\SavedRequestRepository;
use Doctrine\Common\Collections\ArrayCollection;
final class SectionCollectionDataProvider extends AbstractCollectionDataProvider
{
protected const ENTITY = Section::class;
protected const ENDPOINT = '/api/sections';
/**
* @var SavedRequestRepository
*/
private $savedRequestRepository;
/**
* @param FilterBuildersChain $filterBuildersChain
* @param ApiWebService $apiWebService
* @param ApiUserProvider $apiUserProvider
* @param CacheManager $cacheManager
* @param ListingResponseTransformerInterface $listingResponseTransformer
* @param SavedRequestRepository $savedRequestRepository
*/
public function __construct(
FilterBuildersChain $filterBuildersChain,
ApiWebService $apiWebService,
ApiUserProvider $apiUserProvider,
CacheManager $cacheManager,
ListingResponseTransformerInterface $listingResponseTransformer,
SavedRequestRepository $savedRequestRepository
) {
parent::__construct($filterBuildersChain, $apiWebService, $apiUserProvider, $cacheManager, $listingResponseTransformer);
$this->savedRequestRepository = $savedRequestRepository;
}
/**
* {@inheritdoc}
*/
public function getCollection(string $resourceClass, string $operationName = null, array $context = []): iterable
{
$sections = parent::getCollection($resourceClass, $operationName, $context);
foreach ($sections as $section) {
$savedRequests = $this->savedRequestRepository->getSavedRequestsBySection($section);
$section->setSectionSavedRequests(new ArrayCollection($savedRequests));
}
return $sections;
}
}