src/Program/Doctrine/Repository/ProgramRepository.php line 25

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Program\Doctrine\Repository;
  4. use App\Point\Form\DataTransferObject\DashboardFilter;
  5. use App\Program\Doctrine\Entity\Program;
  6. use App\Program\Form\DataTransferObject\ProgramsFilter;
  7. use App\Program\Gateway\ProgramGateway;
  8. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  9. use Doctrine\ORM\Tools\Pagination\Paginator;
  10. use Doctrine\Persistence\ManagerRegistry;
  11. use Symfony\Component\Security\Core\Exception\UserNotFoundException;
  12. use Symfony\Component\Security\Core\User\UserInterface;
  13. /**
  14.  * @template T
  15.  *
  16.  * @extends ServiceEntityRepository<Program>
  17.  *
  18.  * @method findOneBy(array $criteria, ?array $orderBy = null) ?Program
  19.  * @method findAll()                                          array<int, Program>
  20.  */
  21. final class ProgramRepository extends ServiceEntityRepository implements ProgramGateway
  22. {
  23.     public function __construct(ManagerRegistry $registry)
  24.     {
  25.         parent::__construct($registryProgram::class);
  26.     }
  27.     /**
  28.      * @return array<array-key, Program>
  29.      */
  30.     public function getPointToCurrency(DashboardFilter $filter): array
  31.     {
  32.         $queryBuilder $this->createQueryBuilder('p')
  33.             ->addSelect('c')
  34.             ->join('p.client''c');
  35.         if (null !== $filter->getClient()) {
  36.             $queryBuilder->andWhere('c = :client')->setParameter('client'$filter->getClient());
  37.         }
  38.         if (null !== $filter->getProgram()) {
  39.             $queryBuilder->andWhere('p = :program')->setParameter('program'$filter->getProgram());
  40.         }
  41.         if (null !== $filter->getProfile()) {
  42.             $queryBuilder
  43.                 ->andWhere('p = :profile')
  44.                 ->setParameter('profile'$filter->getProfile());
  45.         }
  46.         return $queryBuilder->getQuery()->getResult();
  47.     }
  48.     public function loadUserByUsername(string $username): ?Program
  49.     {
  50.         $user $this->findOneBy(['apiKey' => $username]);
  51.         if (null === $user) {
  52.             throw new UserNotFoundException();
  53.         }
  54.         return $user;
  55.     }
  56.     public function loadUserByIdentifier(string $identifier): ?UserInterface
  57.     {
  58.         return $this->loadUserByUsername($identifier);
  59.     }
  60.     public function update(Program $program): void
  61.     {
  62.         $this->_em->flush();
  63.     }
  64.     public function create(Program $program): void
  65.     {
  66.         $this->_em->persist($program);
  67.         $this->_em->flush();
  68.     }
  69.     public function delete(Program $program): void
  70.     {
  71.         $this->_em->remove($program);
  72.         $this->_em->flush();
  73.     }
  74.     public function getPaginatedPrograms(
  75.         int $page,
  76.         int $length,
  77.         string $column,
  78.         string $direction,
  79.         ProgramsFilter $filter
  80.     ): Paginator {
  81.         $queryBuilder $this->createQueryBuilder('p')
  82.             ->addSelect('c')
  83.             ->join('p.client''c')
  84.             ->orderBy($column$direction)
  85.             ->setMaxResults($length)
  86.             ->setFirstResult($page $length $length);
  87.         if (null !== $filter->getClient()) {
  88.             $queryBuilder
  89.                 ->andWhere('c = :client')
  90.                 ->setParameter('client'$filter->getClient());
  91.         }
  92.         if (null !== $filter->getSearch()) {
  93.             $queryBuilder
  94.                 ->andWhere('p.name LIKE :search')
  95.                 ->setParameter('search''%'.$filter->getSearch().'%');
  96.         }
  97.         if (=== $filter->getStatus()) {
  98.             $queryBuilder
  99.                 ->andWhere('p.startedAt <= NOW()')
  100.                 ->andWhere(
  101.                     $queryBuilder->expr()->orX(
  102.                         $queryBuilder->expr()->lte('p.endedAt''NOW()'),
  103.                         $queryBuilder->expr()->isNull('p.endedAt')
  104.                     )
  105.                 );
  106.         }
  107.         if (=== $filter->getStatus()) {
  108.             $queryBuilder->andWhere('p.startedAt > NOW()');
  109.         }
  110.         if (=== $filter->getStatus()) {
  111.             $queryBuilder->andWhere('p.endedAt <= NOW()');
  112.         }
  113.         return new Paginator($queryBuildertrue);
  114.     }
  115. }