1 | <?php |
||
19 | final class AsyncPagerPersister implements PagerPersisterInterface |
||
20 | { |
||
21 | public const NAME = 'async'; |
||
22 | private const DEFAULT_PAGE_SIZE = 100; |
||
23 | |||
24 | /** |
||
25 | * @var PagerPersisterRegistry |
||
26 | */ |
||
27 | private $pagerPersisterRegistry; |
||
28 | |||
29 | /** |
||
30 | * @var PagerProviderRegistry |
||
31 | */ |
||
32 | private $pagerProviderRegistry; |
||
33 | |||
34 | /** |
||
35 | * @var MessageBusInterface |
||
36 | */ |
||
37 | private $messageBus; |
||
38 | |||
39 | 2 | public function __construct( |
|
48 | |||
49 | /** |
||
50 | * {@inheritdoc} |
||
51 | */ |
||
52 | 1 | public function insert(PagerInterface $pager, array $options = []): void |
|
53 | { |
||
54 | 1 | $pager->setMaxPerPage(empty($options['max_per_page']) ? self::DEFAULT_PAGE_SIZE : $options['max_per_page']); |
|
55 | |||
56 | 1 | $options = \array_replace([ |
|
57 | 1 | 'max_per_page' => $pager->getMaxPerPage(), |
|
58 | 1 | 'first_page' => $pager->getCurrentPage(), |
|
59 | 1 | 'last_page' => $pager->getNbPages(), |
|
60 | 1 | ], $options); |
|
61 | |||
62 | 1 | $pager->setCurrentPage($options['first_page']); |
|
63 | |||
64 | 1 | $lastPage = \min($options['last_page'], $pager->getNbPages()); |
|
65 | 1 | $page = $pager->getCurrentPage(); |
|
66 | do { |
||
67 | 1 | $this->messageBus->dispatch(new AsyncPersistPage($page, $options)); |
|
68 | |||
69 | 1 | ++$page; |
|
70 | 1 | } while ($page <= $lastPage); |
|
71 | 1 | } |
|
72 | |||
73 | 1 | public function insertPage(int $page, array $options = []): int |
|
97 | } |
||
98 |