Code Duplication    Length = 52-52 lines in 2 locations

src/Service/Doctrine/ResultIterator.php 1 location

@@ 11-62 (lines=52) @@
8
use Psr\Log\LoggerInterface;
9
use Generator;
10
11
class ResultIterator
12
{
13
    private $resultProvider;
14
    private $logger;
15
    private $defaultPageSize;
16
17
    public function __construct(
18
        ResultProvider $resultProvider,
19
        LoggerInterface $logger,
20
        int $defaultPageSize
21
    ) {
22
        $this->resultProvider = $resultProvider;
23
        $this->logger = $logger;
24
        $this->defaultPageSize = $defaultPageSize;
25
    }
26
27
    public function iterate(ConfiguredQuery $configuredQuery, Pager $startPager = null): Generator
28
    {
29
        $pager = $startPager !== null ? clone $startPager : new Pager();
30
        if ($pager->getLimit() === null) {
31
            $pager->setLimit($this->defaultPageSize);
32
        }
33
34
        while (true) {
35
            $result = $this->resultProvider->getResultForQuery($configuredQuery, $pager);
36
37
            foreach ($result->getItems() as $item) {
38
                yield $item;
39
            }
40
41
            $this->handleCycleEnd();
42
43
            if (!$result->hasNext()) {
44
                $this->logger->info('Finished iterating');
45
                return;
46
            }
47
48
            $pager = (new Pager())
49
                ->setOrderingPairs($pager->getOrderingPairs())
50
                ->setLimit($pager->getLimit())
51
                ->setAfter($result->getNextCursor())
52
            ;
53
54
            $this->logger->info('Continuing with iteration', ['after' => $result->getNextCursor()]);
55
        }
56
    }
57
58
    protected function handleCycleEnd()
59
    {
60
        // intentionally empty – override in extended classes
61
    }
62
}
63

src/Service/ODM/ResultIterator.php 1 location

@@ 11-62 (lines=52) @@
8
use Psr\Log\LoggerInterface;
9
use Generator;
10
11
class ResultIterator
12
{
13
    private $resultProvider;
14
    private $logger;
15
    private $defaultPageSize;
16
17
    public function __construct(
18
        ResultProvider $resultProvider,
19
        LoggerInterface $logger,
20
        int $defaultPageSize
21
    ) {
22
        $this->resultProvider = $resultProvider;
23
        $this->logger = $logger;
24
        $this->defaultPageSize = $defaultPageSize;
25
    }
26
27
    public function iterate(ConfiguredQuery $configuredQuery, Pager $startPager = null): Generator
28
    {
29
        $pager = $startPager !== null ? clone $startPager : new Pager();
30
        if ($pager->getLimit() === null) {
31
            $pager->setLimit($this->defaultPageSize);
32
        }
33
34
        while (true) {
35
            $result = $this->resultProvider->getResultForQuery($configuredQuery, $pager);
36
37
            foreach ($result->getItems() as $item) {
38
                yield $item;
39
            }
40
41
            $this->handleCycleEnd();
42
43
            if (!$result->hasNext()) {
44
                $this->logger->info('Finished iterating');
45
                return;
46
            }
47
48
            $pager = (new Pager())
49
                ->setOrderingPairs($pager->getOrderingPairs())
50
                ->setLimit($pager->getLimit())
51
                ->setAfter($result->getNextCursor())
52
            ;
53
54
            $this->logger->info('Continuing with iteration', ['after' => $result->getNextCursor()]);
55
        }
56
    }
57
58
    protected function handleCycleEnd()
59
    {
60
        // intentionally empty – override in extended classes
61
    }
62
}
63