src/DataProvider/OrderRequestDataProvider.php line 121

Open in your IDE?
  1. <?php
  2. namespace App\DataProvider;
  3. use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\FilterExtension;
  4. use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\PaginationExtension;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGenerator;
  6. use ApiPlatform\Core\DataProvider\ContextAwareCollectionDataProviderInterface;
  7. use ApiPlatform\Core\DataProvider\ItemDataProviderInterface;
  8. use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
  9. use ApiPlatform\Core\DataProvider\SerializerAwareDataProviderInterface;
  10. use ApiPlatform\Core\DataProvider\SerializerAwareDataProviderTrait;
  11. use App\DataProvider\Paginator\OrderRequestPaginator;
  12. use App\DataProvider\Traits\CompanyRestrictedTrait;
  13. use App\DataTransformer\OrderRequestDataTransformer;
  14. use App\Entity\OrderRequest;
  15. use App\Request\OrderRequestRequest;
  16. use App\Security\CompanyUserProvider;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Doctrine\ORM\QueryBuilder;
  19. use Symfony\Component\Security\Core\Security;
  20. class OrderRequestDataProvider implements
  21. ContextAwareCollectionDataProviderInterface,
  22. RestrictedDataProviderInterface,
  23. ItemDataProviderInterface,
  24. SerializerAwareDataProviderInterface
  25. {
  26. use SerializerAwareDataProviderTrait;
  27. use CompanyRestrictedTrait;
  28. /**
  29. * @var OrderRequestDataTransformer
  30. */
  31. private $transformer;
  32. /**
  33. * @var PaginationExtension
  34. */
  35. private $paginationExtension;
  36. /**
  37. * @var FilterExtension
  38. */
  39. private $filterExtension;
  40. /**
  41. * OrderRequestDataProvider constructor.
  42. *
  43. * @param EntityManagerInterface $entityManager
  44. * @param OrderRequestDataTransformer $transformer
  45. * @param PaginationExtension $paginationExtension
  46. * @param FilterExtension $filterExtension
  47. * @param Security $security
  48. * @param CompanyUserProvider $userProvider
  49. */
  50. public function __construct(
  51. EntityManagerInterface $entityManager,
  52. OrderRequestDataTransformer $transformer,
  53. PaginationExtension $paginationExtension,
  54. FilterExtension $filterExtension,
  55. Security $security,
  56. CompanyUserProvider $userProvider
  57. ) {
  58. $this->entityManager = $entityManager;
  59. $this->transformer = $transformer;
  60. $this->paginationExtension = $paginationExtension;
  61. $this->filterExtension = $filterExtension;
  62. $this->security = $security;
  63. $this->userProvider = $userProvider;
  64. }
  65. public function getCollection(string $resourceClass, string $operationName = null, array $context = [])
  66. {
  67. /**
  68. * @var QueryBuilder $qb
  69. */
  70. $qb = $this->entityManager->getRepository(OrderRequest::class)->createQueryBuilder('p');
  71. $qng = new QueryNameGenerator();
  72. $qb = $this->addRestrictions($qb);
  73. $this->paginationExtension->applyToCollection($qb, $qng, $resourceClass, $operationName, $context);
  74. $this->filterExtension->applyToCollection($qb, $qng, $resourceClass, $operationName, $context);
  75. // Default sorting by created at desc
  76. if (!$qb->getDQLPart('orderBy')) {
  77. $qb->addOrderBy('p.createdAt', 'DESC');
  78. }
  79. return new OrderRequestPaginator($this->transformer, $qb);
  80. }
  81. public function getItem(string $resourceClass, $id, string $operationName = null, array $context = [])
  82. {
  83. /**
  84. * @var QueryBuilder $qb
  85. */
  86. $qb = $this->entityManager->getRepository(OrderRequest::class)->createQueryBuilder('p');
  87. $this->addRestrictions($qb)
  88. ->andWhere('p.id = :id')
  89. ->setParameter('id', $id);
  90. $orderRequest = $qb->getQuery()->getOneOrNullResult();
  91. if ($orderRequest === null) {
  92. return null;
  93. }
  94. $this->transformer->setSingleEntity(true);
  95. return $this->transformer->transform($orderRequest);
  96. }
  97. public function supports(string $resourceClass, string $operationName = null, array $context = []): bool
  98. {
  99. return OrderRequestRequest::class === $resourceClass;
  100. }
  101. }