Skip to content

Commit fc1f347

Browse files
authored
Merge pull request #13 from RRZE-Webteam/FAU-428
[FAU-428] Split massive HIS code relationship queries into smaller ones
2 parents c171c04 + 9710738 commit fc1f347

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

src/Infrastructure/Repository/WordPressDatabaseDegreeProgramCollectionRepository.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ final class WordPressDatabaseDegreeProgramCollectionRepository implements Degree
1717
{
1818
public function __construct(
1919
private DegreeProgramViewRepository $degreeProgramViewRepository,
20-
private WpQueryArgsBuilder $queryArgsBuilder
20+
private WpQueryArgsBuilder $queryArgsBuilder,
21+
private WpQuerySplitter $querySplitter
2122
) {
2223
}
2324

2425
public function findRawCollection(CollectionCriteria $criteria): PaginationAwareCollection
2526
{
2627
$query = new WP_Query();
28+
$criteria = $this->querySplitter->maybeSplitQuery($criteria);
2729
/** @var array<int> $ids */
2830
$ids = $query->query(
2931
$this->queryArgsBuilder
@@ -48,6 +50,10 @@ public function findRawCollection(CollectionCriteria $criteria): PaginationAware
4850
public function findTranslatedCollection(CollectionCriteria $criteria, string $languageCode): PaginationAwareCollection
4951
{
5052
$query = new WP_Query();
53+
$criteria = $this->querySplitter->maybeSplitQuery(
54+
$criteria->withLanguage($languageCode)
55+
);
56+
5157
/** @var array<int> $ids */
5258
$ids = $query->query(
5359
$this->queryArgsBuilder
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Fau\DegreeProgram\Common\Infrastructure\Repository;
6+
7+
use Fau\DegreeProgram\Common\Application\Repository\CollectionCriteria;
8+
use WP_Query;
9+
10+
final class WpQuerySplitter
11+
{
12+
public function __construct(
13+
private WpQueryArgsBuilder $queryArgsBuilder
14+
) {
15+
}
16+
17+
/**
18+
* @param CollectionCriteria $criteria
19+
* @return CollectionCriteria
20+
*/
21+
public function maybeSplitQuery(CollectionCriteria $criteria): CollectionCriteria
22+
{
23+
$hisCodes = $criteria->hisCodes();
24+
25+
if (count($hisCodes) <= 1) {
26+
return $criteria;
27+
}
28+
29+
$ids = [];
30+
31+
foreach ($hisCodes as $hisCode) {
32+
$criteria = $criteria->withHisCodes([$hisCode]);
33+
$query = new WP_Query();
34+
/** @var array<int> $ids */
35+
$ids = array_merge(
36+
$query->query(
37+
$this->queryArgsBuilder
38+
->build($criteria)
39+
->args()
40+
),
41+
$ids
42+
);
43+
}
44+
45+
return $criteria
46+
->withHisCodes([])
47+
->withInclude($ids);
48+
}
49+
}

0 commit comments

Comments
 (0)