refactored repositories and DB queries (#5026)

* removed unused teams from export order
* added new paginator for query instead of querybuilder
* added field hydrate enums
* hide PARTIAL deprecation
* never log deprecations in production
* replaced InvoiceLoader with native Doctrine feature
* prevent excessive permission queries
* support loading customers of team
* improved findByIds
* internalized API
* fix null string deprecations
This commit is contained in:
Kevin Papst
2024-08-27 10:11:19 +02:00
committed by GitHub
parent 9e3d243b4b
commit 9d933f62c0
81 changed files with 1648 additions and 1436 deletions

View File

@@ -29,7 +29,6 @@ use App\Reporting\ProjectInactive\ProjectInactiveQuery;
use App\Reporting\ProjectView\ProjectViewModel;
use App\Reporting\ProjectView\ProjectViewQuery;
use App\Repository\ActivityRepository;
use App\Repository\Loader\ProjectLoader;
use App\Repository\ProjectRepository;
use App\Repository\TimesheetRepository;
use App\Repository\UserRepository;
@@ -85,7 +84,7 @@ class ProjectStatisticService
$qb = $this->projectRepository->createQueryBuilder('p');
$qb
->select('p, c')
->select('p')
->leftJoin('p.customer', 'c')
->andWhere($qb->expr()->eq('p.visible', true))
->andWhere($qb->expr()->eq('c.visible', true))
@@ -108,15 +107,9 @@ class ProjectStatisticService
;
$this->projectRepository->addPermissionCriteria($qb, $user);
$query = $this->projectRepository->prepareProjectQuery($qb->getQuery());
/** @var Project[] $projects */
$projects = $qb->getQuery()->getResult();
// pre-cache customer objects instead of joining them
$loader = new ProjectLoader($this->projectRepository->createQueryBuilder('p')->getEntityManager(), false, false, false);
$loader->loadResults($projects);
return $projects;
return $this->projectRepository->getProjects($query);
}
/**
@@ -128,6 +121,10 @@ class ProjectStatisticService
$begin = $dateRange->getBegin();
$end = $dateRange->getEnd();
if ($begin === null || $end === null) {
throw new \InvalidArgumentException('Missing date in date-range for project statistics');
}
$qb = $this->projectRepository->createQueryBuilder('p');
$qb
->select('p')
@@ -191,15 +188,9 @@ class ProjectStatisticService
}
$this->projectRepository->addPermissionCriteria($qb, $user);
$query = $this->projectRepository->prepareProjectQuery($qb->getQuery());
/** @var Project[] $projects */
$projects = $qb->getQuery()->getResult();
// pre-cache customer objects instead of joining them
$loader = new ProjectLoader($this->projectRepository->createQueryBuilder('p')->getEntityManager(), false, false, false);
$loader->loadResults($projects);
return $projects;
return $this->projectRepository->getProjects($query);
}
public function getBudgetStatisticModel(Project $project, DateTimeInterface $today): ProjectBudgetStatisticModel
@@ -687,15 +678,9 @@ class ProjectStatisticService
}
$this->projectRepository->addPermissionCriteria($qb, $user);
$query = $this->projectRepository->prepareProjectQuery($qb->getQuery());
/** @var Project[] $projects */
$projects = $qb->getQuery()->getResult();
// pre-cache customer objects instead of joining them
$loader = new ProjectLoader($this->projectRepository->createQueryBuilder('p')->getEntityManager(), false, false, false);
$loader->loadResults($projects);
return $projects;
return $this->projectRepository->getProjects($query);
}
/**