date-poll-api/src/Repository/PollRepository.php

76 lines
1.9 KiB
PHP
Raw Permalink Normal View History

2019-10-25 14:59:20 +02:00
<?php
namespace App\Repository;
use App\Entity\Poll;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
2019-10-25 14:59:20 +02:00
/**
2021-04-27 10:22:16 +02:00
* @method Poll|null find( $id, $lockMode = null, $lockVersion = null )
* @method Poll|null findOneBy( array $criteria, array $orderBy = null )
2019-10-25 14:59:20 +02:00
* @method Poll[] findAll()
2021-04-27 10:22:16 +02:00
* @method Poll[] findBy( array $criteria, array $orderBy = null, $limit = null, $offset = null )
2019-10-25 14:59:20 +02:00
*/
2021-04-27 10:22:16 +02:00
class PollRepository extends ServiceEntityRepository {
public function __construct(
ManagerRegistry $registry
) {
parent::__construct( $registry, Poll::class );
}
2019-10-25 14:59:20 +02:00
2021-04-27 10:22:16 +02:00
// /**
// * @return Poll[] Returns an array of Poll objects
// */
public function findExpiredPolls() {
return $this->findExpirationPollOfDay( 0 );
}
public function findSoonExpiredPolls() {
return $this->findExpirationPollOfDay( 30 );
2021-04-27 10:22:16 +02:00
}
public function findDeletableExpiredPolls() {
return $this->findExpirationPollOfDay( - 30 );
}
2021-05-21 09:34:01 +02:00
public function findExpirationPollOfDay( $count_of_days ) {
2021-05-21 09:34:01 +02:00
$today = new \DateTime();
2021-05-21 09:34:01 +02:00
if ( $count_of_days > - 1 ) {
2021-05-21 09:34:01 +02:00
$date_soon = $today->add( new \DateInterval( 'P' . $count_of_days . 'D' ) );
} else {
$date_soon = $today->sub( new \DateInterval( 'P' . abs( $count_of_days ) . 'D' ) );
}
return $this->createQueryBuilder( 'p' )
->andWhere( 'p.expiracyDate < :date_soon' )
->setParameter( 'date_soon', $date_soon )
->orderBy( 'p.id', 'ASC' )
->getQuery()
->getResult();
2021-04-27 10:22:16 +02:00
}
2021-05-21 09:34:01 +02:00
/**
* find all the polls of an owner
*
* @param $email
*
* @return int|mixed|string
*/
public function findAllByOwnerEmail( $email ) {
return $this->createQueryBuilder( 'p' )
->andWhere( 'p.owner.email = :email' )
->setParameter( 'email', $email )
->orderBy( 'p.id', 'DESC' )
->getQuery()
->getResult();
}
2019-10-25 14:59:20 +02:00
}