MailRepository::markMailsAsRead()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
c 0
b 0
f 0
rs 9.4285
cc 1
eloc 12
nc 1
nop 2
1
<?php
2
namespace AppBundle\Entity\Repository;
3
4
use AppBundle\Entity\Mail;
5
use Doctrine\ORM\EntityRepository;
6
7
class MailRepository extends EntityRepository
8
{
9
    /**
10
     * @param int $authenticatedUserId
11
     *
12
     * @return array
13
     */
14
    public function getAllLastMailIdAndRecipientUserId($authenticatedUserId)
15
    {
16
        $query = $this->createQueryBuilder('m')
17
            ->select([
18
                'MAX(m.id) AS lastMailId',
19
                'IF(m.userIdFrom = :authenticatedUserId AND m.userId = :authenticatedUserId, m.userIdTo, m.userIdFrom) AS recipientUserId',
20
            ])
21
            ->where('m.userId = :authenticatedUserId')
22
            ->groupBy('recipientUserId')
23
            ->orderBy('lastMailId', 'DESC')
24
            ->setParameter('authenticatedUserId', $authenticatedUserId)
25
            ->getQuery();
26
27
        return $query->getArrayResult();
28
    }
29
30
    /**
31
     * @param int $authenticatedUserId
32
     * @param int $recipientUserId
33
     *
34
     * @return Mail[]
35
     */
36
    public function findAllMessagesBetweenUsers($authenticatedUserId, $recipientUserId)
37
    {
38
        $qb = $this->createQueryBuilder('m');
39
40
        $where = $qb->expr()->orX(
41
            'm.userIdFrom = :authenticatedUserId AND m.userIdTo = :recipientUserId',
42
            'm.userIdFrom = :recipientUserId AND m.userIdTo = :authenticatedUserId'
43
        );
44
45
        $query = $qb->where($where)
46
            ->andWhere('m.userId = :authenticatedUserId')
47
            ->setParameters([
48
                'authenticatedUserId' => $authenticatedUserId,
49
                'recipientUserId' => $recipientUserId,
50
            ])
51
            ->orderBy('m.id', 'DESC')
52
            ->getQuery();
53
54
        return $query->getResult();
55
    }
56
57
    /**
58
     * @param int $userId
59
     *
60
     * @return int
61
     */
62
    public function countUnreadMail($userId)
63
    {
64
        $query = $this->createQueryBuilder('m')
65
            ->select('COUNT(m.id)')
66
            ->where('m.userId = :userId AND m.userIdTo = :userId AND m.isRead = :isRead')
67
            ->setParameters([
68
                'userId' => $userId,
69
                'isRead' => 'no',
70
            ])
71
            ->getQuery();
72
73
        return (int) $query->getSingleScalarResult();
74
    }
75
76
    /**
77
     * @param int $userIdFrom
78
     * @param int $userIdTo
79
     *
80
     * @return mixed
81
     */
82
    public function markMailsAsRead($userIdFrom, $userIdTo)
83
    {
84
        $query = $this->getEntityManager()
85
            ->createQueryBuilder()
86
            ->update(Mail::class, 'm')
87
            ->set('m.isRead', $this->getEntityManager()->getConnection()->quote('yes'))
88
            ->where('m.userIdFrom = :userIdFrom AND m.userIdTo = :userIdTo AND m.isRead = :isRead')
89
            ->setParameters([
90
                'userIdFrom' => $userIdFrom,
91
                'userIdTo' => $userIdTo,
92
                'isRead' => 'no',
93
            ])
94
            ->getQuery();
95
96
        return $query->execute();
97
    }
98
}
99