zend-blog-3-backend
110 строк · 2.9 Кб
1<?php
2
3namespace App\Repository;
4
5use App\DTO\CommentatorDTO;
6use App\Entity\Commentator;
7use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
8use Doctrine\Persistence\ManagerRegistry;
9
10/**
11* CommentatorRepository
12*
13* @method Commentator|null findOneByDisqusId($id)
14*/
15class CommentatorRepository extends ServiceEntityRepository
16{
17use ListQueryTrait;
18
19/**
20* @param ManagerRegistry $registry
21*/
22public function __construct(ManagerRegistry $registry)
23{
24parent::__construct($registry, Commentator::class);
25}
26
27public function findOrCreate(CommentatorDTO $commentator): Commentator
28{
29$result = $this->getByCommentatorData($commentator);
30if (!$result) {
31$result = new Commentator();
32$result
33->setName($commentator->name)
34->setEmail($commentator->email)
35->setWebsite($commentator->getNormalizedURL())
36;
37
38$this->getEntityManager()->persist($result);
39}
40
41return $result;
42}
43
44public function getByCommentatorData(CommentatorDTO $commentator): ?Commentator
45{
46$qb = $this->createQueryBuilder('c');
47$qb
48->where($qb->expr()->eq('c.name', ':name'))
49->setParameter('name', $commentator->name)
50;
51
52if ($commentator->email) {
53$qb
54->andWhere($qb->expr()->eq('c.email', ':email'))
55->setParameter('email', $commentator->email)
56;
57} else {
58$qb->andWhere($qb->expr()->isNull('c.email'));
59}
60
61if ($commentator->website) {
62$qb
63->andWhere($qb->expr()->eq('c.website', ':website'))
64->setParameter('website', $commentator->getNormalizedURL())
65;
66} else {
67$qb->andWhere($qb->expr()->isNull('c.website'));
68}
69
70return $qb->getQuery()->getOneOrNullResult();
71}
72
73/**
74* @return Commentator[]
75*/
76public function getWithUncheckedEmails(): array
77{
78$qb = $this->createQueryBuilder('c');
79$qb
80->andWhere($qb->expr()->isNotNull('c.email'))
81->andWhere($qb->expr()->isNull('c.emailCheck'))
82->setMaxResults(20)
83;
84
85return $qb->getQuery()->getResult();
86}
87
88/**
89* @return Commentator[]
90*/
91public function getWithUncheckedLinks(): array
92{
93$from = (new \DateTime())->sub(new \DateInterval('P1W'))->format('Y-m-d H:i:s');
94
95$qb = $this->createQueryBuilder('c');
96$qb
97->andWhere($qb->expr()->isNotNull('c.website'))
98->andWhere(
99$qb->expr()->orX(
100$qb->expr()->isNull('c.rottenCheck'),
101$qb->expr()->lt('c.rottenCheck', ':from')
102)
103)
104->setParameter('from', $from)
105->setMaxResults(10)
106;
107
108return $qb->getQuery()->getResult();
109}
110}
111