<?php
namespace App\Repository;
use App\Entity\Reviews;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method Reviews|null find($id, $lockMode = null, $lockVersion = null)
* @method Reviews|null findOneBy(array $criteria, array $orderBy = null)
* @method Reviews[] findAll()
* @method Reviews[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ReviewsRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Reviews::class);
}
public function findFirstYearOfReview($user) {
return $this->createQueryBuilder('r')
->andWhere('r.user = :user')
->setParameter('user', $user)
->orderBy('r.created_at', 'ASC')
->getQuery()
->setMaxResults(1)
->getResult()
;
}
public function findLastThirtyDaysReviews($user){
return $this->createQueryBuilder('r')
->andWhere('r.user = :user')
->andWhere('r.created_at > :m_date')
->setParameter('user', $user)
->setParameter('m_date', new \DateTime('-30 days'))
->orderBy('r.created_at', 'DESC')
->getQuery()
->getResult()
;
}
public function findAdminReviewsFilter($dateFilter = null, $admin){
if($dateFilter !== null){
return $this->createQueryBuilder('r')
->innerJoin('r.user', 'u')
->andWhere('u.owner = :admin')
->andWhere('r.created_at >= :m_date')
->setParameter('admin', $admin)
->setParameter('m_date', new \DateTime($dateFilter))
->orderBy('r.created_at', 'DESC')
->getQuery()
->getResult()
;
}else{
return $this->createQueryBuilder('r')
->innerJoin('r.user', 'u')
->andWhere('u.owner = :admin')
->andWhere('r.created_at >= :m_date')
->setParameter('admin', $admin)
->setParameter('m_date', new \DateTime('-24 hours'))
->orderBy('r.created_at', 'DESC')
->getQuery()
->getResult()
;
}
}
public function findProfessionalsReviews($admin){
return $this->createQueryBuilder('r')
->innerJoin('r.user', 'u')
->andWhere('u.owner = :admin')
->setParameter('admin', $admin)
->orderBy('r.created_at', 'DESC')
->setMaxResults(10)
->getQuery()
->getResult()
;
}
public function findTopReviewsOfTheMonth($user, $date)
{
return $this->createQueryBuilder('r')
->andWhere('r.user = :user')
->andWhere('MONTH(r.created_at) = :month')
->andWhere('YEAR(r.created_at) = :year')
->setParameter('month', $date['month'])
->setParameter('year', $date['year'])
->setParameter('user', $user)
->orderBy('r.star_rating', 'DESC')
->getQuery()
->getResult()
;
}
public function findConcernedProfessionals(string $dateFilter = null, User $current_user)
{
if($dateFilter !== null){
return $this->createQueryBuilder('r')
->innerJoin('r.user', 'u')
->andWhere('u.owner = :user')
->andWhere('r.created_at > :date')
->setParameter('user', $current_user)
->setParameter('date', new \DateTime($dateFilter))
->orderBy('r.created_at', 'DESC')
->getQuery()
->getResult()
;
}else{
return $this->createQueryBuilder('u')
->orderBy('r.created_at', 'DESC')
->getQuery()
->getResult()
;
}
}
// /**
// * @return Reviews[] Returns an array of Reviews objects
// */
/*
public function findByExampleField($value)
{
return $this->createQueryBuilder('r')
->andWhere('r.exampleField = :val')
->setParameter('val', $value)
->orderBy('r.id', 'ASC')
->setMaxResults(10)
->getQuery()
->getResult()
;
}
*/
/*
public function findOneBySomeField($value): ?Reviews
{
return $this->createQueryBuilder('r')
->andWhere('r.exampleField = :val')
->setParameter('val', $value)
->getQuery()
->getOneOrNullResult()
;
}
*/
}