Files
Lesstime/src/Repository/NotificationRepository.php
T
Matthieu df0fec0272 fix(notifications) : pagination réelle côté provider pour ne plus tronquer à 30 (LST-52)
NotificationProvider retournait findBy(..., 30) : limite codée en dur,
paramètre page ignoré et tableau brut (pas un Paginator). hydra:totalItems
valait donc 30 → fetchAllHydra s'arrêtait à la 1re page et les notifications
restaient tronquées à 30 malgré le correctif front.

- NotificationProvider : vraie pagination Doctrine (Pagination + DoctrinePaginator
  + TraversablePaginator), totalItems réel et hydra:view.next exposés
- NotificationRepository : createUserNotificationsQueryBuilder (filtre user + tri)
- fetchAllHydra : ne retronque plus silencieusement quand hydra:totalItems est
  absent, pagine jusqu'à une page non pleine
2026-06-15 11:21:05 +02:00

58 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Repository;
use App\Entity\Notification;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @extends ServiceEntityRepository<Notification>
*/
class NotificationRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Notification::class);
}
public function createUserNotificationsQueryBuilder(UserInterface $user): QueryBuilder
{
return $this->createQueryBuilder('n')
->where('n.user = :user')
->setParameter('user', $user)
->orderBy('n.createdAt', 'DESC')
;
}
public function countUnreadByUser(User $user): int
{
return (int) $this->createQueryBuilder('n')
->select('COUNT(n.id)')
->where('n.user = :user')
->andWhere('n.isRead = false')
->setParameter('user', $user)
->getQuery()
->getSingleScalarResult()
;
}
public function markAllReadByUser(User $user): int
{
return $this->createQueryBuilder('n')
->update()
->set('n.isRead', 'true')
->where('n.user = :user')
->andWhere('n.isRead = false')
->setParameter('user', $user)
->getQuery()
->execute()
;
}
}