<?php
namespace App\DataProvider;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\PaginationExtension;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryResultCollectionExtensionInterface;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGenerator;
use ApiPlatform\Core\DataProvider\ContextAwareCollectionDataProviderInterface;
use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
use App\Repository\OrganizationRepository;
use Evo\Infrastructure\MappingORM\Organization;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
final class ValidationKycDataProvider implements ContextAwareCollectionDataProviderInterface, RestrictedDataProviderInterface
{
private const OPERATION = 'validation_kyc';
private OrganizationRepository $orgaRepo;
private RequestStack $requestStack;
private PaginationExtension $paginationExtension;
public function __construct(
OrganizationRepository $orgaRepo,
RequestStack $requestStack,
PaginationExtension $paginationExtension
) {
$this->orgaRepo = $orgaRepo;
$this->requestStack = $requestStack;
$this->paginationExtension = $paginationExtension;
}
public function supports(string $resourceClass, string $operationName = null, array $context = []): bool
{
return Organization::class === $resourceClass && self::OPERATION === $operationName;
}
public function getCollection(string $resourceClass, string $operationName = null, array $context = [])
{
$allStatus = [];
$request = $this->requestStack->getCurrentRequest();
if (!$request instanceof Request) {
return [];
}
$status = $request->attributes->get('status');
$allStatus[] = $status;
if (null !== $request->query->get('organization_status') && !empty($request->query->get('organization_status'))) {
foreach ($request->query->get('organization_status') as $orgaStatus) {
$allStatus[] = $orgaStatus;
}
}
$queryBuilder = $this->orgaRepo->getOrgaToKYC($allStatus, true);
$this->paginationExtension->applyToCollection($queryBuilder, new QueryNameGenerator(), $resourceClass, $operationName, $context);
if ($this->paginationExtension instanceof QueryResultCollectionExtensionInterface
&& $this->paginationExtension->supportsResult($resourceClass, $operationName, $context)) {
return $this->paginationExtension->getResult($queryBuilder, $resourceClass, $operationName, $context);
}
return $queryBuilder->getQuery()->getResult();
}
}