/
AleksWork
/
diary_plants
Обзор
Документация
Войти
/
AleksWork
/
diary_plants
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/Infrastructure/Repository/IncidentRepository.php
133 строки
3 KB
AlexeySerov
Add console and schedle ClearIncidentCommand with worker support
26 май 2026, 18:20
26 май 2026, 18:20
88eba20
Код
Авторство
О чём код?
<?php namespace App\Infrastructure\Repository; use Exception; use DateTimeImmutable; use Doctrine\ORM\QueryBuilder; use App\Domain\Entity\Incident; class IncidentRepository extends AbstractRepository { /** * @return QueryBuilder */ private function getBaseQueryBuilder(): QueryBuilder { $queryBuilder = $this->entityManager->createQueryBuilder(); return $queryBuilder->select('i') ->from(Incident::class, 'i') ->orderBy('i.updatedAt', 'DESC'); } /** * @param int $page * @param int $perPage * @return Incident[] * @throws Exception */ public function getIncidentsPaginated(int $page, int $perPage): array { $queryBuilder = $this->getBaseQueryBuilder() ->setFirstResult(($page - 1) * $perPage) ->setMaxResults($perPage); return $this->getPaginatedResults($queryBuilder, $page, $perPage); } /** * @param int $incidentId * @return Incident|null */ public function find(int $incidentId): ?Incident { return $this->getBaseQueryBuilder() ->andWhere('i.id = :id') ->setParameter('id', $incidentId) ->getQuery() ->getOneOrNullResult(); } /** * @return Incident[] */ public function findAll(): array { return $this->getBaseQueryBuilder() ->getQuery() ->getResult(); } /** * @param ?int $userId * @return Incident[] */ public function findAllByUserId(?int $userId = null): array { $queryBuilder = $this->entityManager->createQueryBuilder(); $qb = $queryBuilder->select('i') ->from(Incident::class, 'i') ->orderBy('i.publicCode', 'ASC'); if ($userId !== null) { $qb->where('i.userId = :userId') ->setParameter('userId', $userId); } return $qb->getQuery()->getResult(); } /** * @param string $publicCode * @return ?Incident */ public function findIncidentByPublicCode(string $publicCode): ?Incident { return $this->getBaseQueryBuilder() ->andWhere('i.publicCode = :publicCode') ->setParameter('publicCode', $publicCode) ->getQuery() ->getOneOrNullResult(); } /** * @param Incident $incident * @return int */ public function create(Incident $incident): int { return $this->store($incident); } /** * @return void */ public function update(): void { $this->flush(); } /** * @param Incident $incident * @return void */ public function remove(Incident $incident): void { $incident->setDeletedAt(); $this->flush(); } /** * @param DateTimeImmutable $date * @return int */ public function deleteOlderThan(DateTimeImmutable $date): int { return $this->entityManager ->createQuery('DELETE FROM App\Domain\Entity\Incident i WHERE i.createdAt < :dateLimit') ->setParameter('dateLimit', $date) ->execute(); } }