src/Repository/Offer/OfferRepository.php line 15

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\Repository\Offer;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. use Slivki\Entity\Category;
  7. use Slivki\Entity\Offer;
  8. use Slivki\Exception\OfferNotFoundException;
  9. final class OfferRepository extends ServiceEntityRepository implements OfferRepositoryInterface
  10. {
  11.     public function __construct(ManagerRegistry $registry)
  12.     {
  13.         parent::__construct($registryOffer::class);
  14.     }
  15.     public function findById(int $id): ?Offer
  16.     {
  17.         $queryBuilder $this->createQueryBuilder('offer');
  18.         $expr $queryBuilder->expr();
  19.         return $queryBuilder
  20.             ->andWhere($expr->eq('offer.ID'':id'))
  21.             ->setParameter('id'$id)
  22.             ->getQuery()
  23.             ->getOneOrNullResult();
  24.     }
  25.     public function getById(int $id): Offer
  26.     {
  27.         $offer $this->findById($id);
  28.         if (!$offer instanceof Offer) {
  29.             throw OfferNotFoundException::missingId($id);
  30.         }
  31.         return $offer;
  32.     }
  33.     public function getByIdAndDirector(int $idint $directorId): Offer
  34.     {
  35.         $qb $this->createQueryBuilder('offer');
  36.         $expr $qb->expr();
  37.         $offer $qb
  38.             ->innerJoin('offer.directors''director')
  39.             ->andWhere($expr->eq('offer.ID'':id'))
  40.             ->andWhere($expr->eq('director.ID'':directorId'))
  41.             ->setParameters([
  42.                 'id' => $id,
  43.                 'directorId' => $directorId,
  44.             ])
  45.             ->getQuery()
  46.             ->getOneOrNullResult();
  47.         if (!$offer instanceof Offer) {
  48.             throw OfferNotFoundException::missingId($id);
  49.         }
  50.         return $offer;
  51.     }
  52.     public function findActiveOffersByIds(array $offerIds): array
  53.     {
  54.         $queryBuilder $this->createQueryBuilder('offer');
  55.         $expr $queryBuilder->expr();
  56.         return $queryBuilder
  57.             ->andWhere($expr->in('offer.ID'':offerIds'))
  58.             ->andWhere($expr->eq('offer.active'':active'))
  59.             ->andWhere($expr->eq('offer.hidden'':hidden'))
  60.             ->andWhere($expr->between('current_timestamp()''offer.activeSince''offer.activeTill'))
  61.             ->setParameters([
  62.                 'offerIds' => $offerIds,
  63.                 'active' => true,
  64.                 'hidden' => false,
  65.             ])
  66.             ->getQuery()
  67.             ->getResult();
  68.     }
  69.     public function clear(): void
  70.     {
  71.         $this->_em->clear(Offer::class);
  72.     }
  73.     public function findAllActiveByDirector(int $directorId): array
  74.     {
  75.         $qb $this->createQueryBuilder('offer');
  76.         $expr $qb->expr();
  77.         return $qb
  78.             ->innerJoin('offer.directors''director')
  79.             ->andWhere($expr->eq('director.ID'':directorId'))
  80.             ->andWhere($expr->eq('offer.active'':active'))
  81.             ->andWhere($expr->eq('offer.hidden'':hidden'))
  82.             ->andWhere($expr->between('current_timestamp()''offer.activeSince''offer.activeTill'))
  83.             ->setParameters([
  84.                 'active' => true,
  85.                 'hidden' => false,
  86.                 'directorId' => $directorId,
  87.             ])
  88.             ->getQuery()
  89.             ->getResult();
  90.     }
  91. }