| @@ 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 | ||
| @@ 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 | ||