Passed
Pull Request — develop (#12)
by BENARD
02:51
created

MessageRepository::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ProjetNormandie\MessageBundle\Repository;
6
7
use DateInterval;
8
use DateTime;
9
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
10
use Doctrine\ORM\NonUniqueResultException;
11
use Doctrine\ORM\NoResultException;
12
use Doctrine\Persistence\ManagerRegistry;
13
use ProjetNormandie\MessageBundle\Entity\Message;
14
15
class MessageRepository  extends ServiceEntityRepository
16
{
17
    public function __construct(ManagerRegistry $registry)
18
    {
19
        parent::__construct($registry, Message::class);
20
    }
21
22
    public function purge(): void
23
    {
24
        //----- delete 1
25
        $query = $this->_em->createQuery(
26
            'DELETE projetNormandie\MessageBundle\Entity\Message m 
27
            WHERE m.isDeletedSender = :isDeletedSender
28
            AND m.isDeletedRecipient = :isDeletedRecipient'
29
        );
30
        $query->setParameter('isDeletedSender', true);
31
        $query->setParameter('isDeletedRecipient', true);
32
        $query->execute();
33
34
        //----- delete 2
35
        $date = new DateTime();
36
        $date = $date->sub(DateInterval::createFromDateString('2 years'));
37
        $query = $this->_em->createQuery(
38
            'DELETE projetNormandie\MessageBundle\Entity\Message m WHERE m.createdAt < :date'
39
        );
40
        $query->setParameter('date', $date->format('Y-m-d'));
41
        $query->execute();
42
    }
43
44
    public function getRecipients($user)
45
    {
46
        $query = $this->createQueryBuilder('m')
47
            ->join('m.recipient', 'u')
48
            ->select('DISTINCT u.id,u.username')
49
            ->where('m.sender = :user')
50
            ->setParameter('user', $user)
51
            ->andWhere('m.isDeletedSender = :isDeletedSender')
52
            ->setParameter('isDeletedSender', false)
53
            ->orderBy("u.username", 'ASC');
54
55
        return $query->getQuery()->getResult();
56
    }
57
58
    public function getSenders($user)
59
    {
60
        $query = $this->createQueryBuilder('m')
61
            ->join('m.sender', 'u')
62
            ->select('DISTINCT u.id,u.username')
63
            ->where('m.recipient = :user')
64
            ->setParameter('user', $user)
65
            ->andWhere('m.isDeletedRecipient = :isDeletedRecipient')
66
            ->setParameter('isDeletedRecipient', false)
67
            ->orderBy("u.username", 'ASC');
68
69
        return $query->getQuery()->getResult();
70
    }
71
72
    public function getNbNewMessage($user)
73
    {
74
        $qb = $this->createQueryBuilder('m')
75
             ->select('COUNT(m.id)')
76
             ->where('m.recipient = :recipient')
77
             ->andWhere('m.isOpened = :isOpened')
78
             ->andWhere('m.isDeletedRecipient = :isDeletedRecipient')
79
             ->setParameter('recipient', $user)
80
             ->setParameter('isOpened', false)
81
             ->setParameter('isDeletedRecipient', false);
82
83
        return (int) $qb->getQuery()->getSingleScalarResult();
84
    }
85
}
86