$query * @return list> */ public function list(array $query): array { $page = 1; $orders = []; $totalCount = null; do { $data = $this->apiClient->getOfflineOrders($query + [ 'page' => $page, 'limit' => self::PAGE_LIMIT, ]); $pageOrders = $data['data']['list'] ?? []; if (!is_array($pageOrders) || $pageOrders === []) { break; } if ($totalCount === null) { $totalCount = isset($data['data']['count']) ? (int) $data['data']['count'] : null; } $orders = array_merge($orders, array_values(array_filter($pageOrders, is_array(...)))); $page++; } while ($this->shouldFetchNextPage($orders, $pageOrders, $totalCount)); return $orders; } /** * @param list> $orders * @param mixed $pageOrders */ private function shouldFetchNextPage(array $orders, mixed $pageOrders, ?int $totalCount): bool { if ($totalCount !== null) { return count($orders) < $totalCount; } return is_array($pageOrders) && count($pageOrders) >= self::PAGE_LIMIT; } }