f493ea237b
Auto Tag Develop / tag (push) Has been cancelled
| Numéro du ticket | Titre du ticket | |------------------|-----------------| | | | ## Description de la PR ## Modification du .env ## Check list - [ ] Pas de régression - [ ] TU/TI/TF rédigée - [ ] TU/TI/TF OK - [ ] CHANGELOG modifié Reviewed-on: #6 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
88 lines
2.4 KiB
PHP
88 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Repository;
|
|
|
|
use App\Entity\Notification;
|
|
use App\Entity\User;
|
|
use DateTimeImmutable;
|
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
use Doctrine\Persistence\ManagerRegistry;
|
|
|
|
/**
|
|
* @extends ServiceEntityRepository<Notification>
|
|
*/
|
|
final class NotificationRepository extends ServiceEntityRepository
|
|
{
|
|
public function __construct(ManagerRegistry $registry)
|
|
{
|
|
parent::__construct($registry, Notification::class);
|
|
}
|
|
|
|
/**
|
|
* @return list<Notification>
|
|
*/
|
|
public function findUnreadByRecipient(User $recipient): array
|
|
{
|
|
return $this->createQueryBuilder('n')
|
|
->andWhere('n.recipient = :recipient')
|
|
->andWhere('n.isRead = :isRead')
|
|
->setParameter('recipient', $recipient)
|
|
->setParameter('isRead', false)
|
|
->orderBy('n.createdAt', 'DESC')
|
|
->setMaxResults(50)
|
|
->getQuery()
|
|
->getResult()
|
|
;
|
|
}
|
|
|
|
/**
|
|
* @return list<Notification>
|
|
*/
|
|
public function findTodayByRecipient(User $recipient): array
|
|
{
|
|
$todayStart = new DateTimeImmutable('today 00:00:00');
|
|
|
|
return $this->createQueryBuilder('n')
|
|
->andWhere('n.recipient = :recipient')
|
|
->andWhere('n.createdAt >= :todayStart')
|
|
->setParameter('recipient', $recipient)
|
|
->setParameter('todayStart', $todayStart)
|
|
->orderBy('n.createdAt', 'DESC')
|
|
->getQuery()
|
|
->getResult()
|
|
;
|
|
}
|
|
|
|
/**
|
|
* @return list<Notification>
|
|
*/
|
|
public function findLatestByRecipient(User $recipient, int $limit = 10): array
|
|
{
|
|
return $this->createQueryBuilder('n')
|
|
->andWhere('n.recipient = :recipient')
|
|
->setParameter('recipient', $recipient)
|
|
->orderBy('n.createdAt', 'DESC')
|
|
->setMaxResults($limit)
|
|
->getQuery()
|
|
->getResult()
|
|
;
|
|
}
|
|
|
|
public function markAllReadByRecipient(User $recipient): int
|
|
{
|
|
return $this->createQueryBuilder('n')
|
|
->update()
|
|
->set('n.isRead', ':isRead')
|
|
->andWhere('n.recipient = :recipient')
|
|
->andWhere('n.isRead = :current')
|
|
->setParameter('isRead', true)
|
|
->setParameter('current', false)
|
|
->setParameter('recipient', $recipient)
|
|
->getQuery()
|
|
->execute()
|
|
;
|
|
}
|
|
}
|