diff --git a/src/Issue/IssueBulkResult.php b/src/Issue/IssueBulkResult.php new file mode 100644 index 0000000..cfe3279 --- /dev/null +++ b/src/Issue/IssueBulkResult.php @@ -0,0 +1,82 @@ +issueErrors; + } + + /** + * @param array $issueErrors + */ + public function setIssueErrors($issueErrors) + { + $this->issueErrors = $issueErrors; + } + + /** + * @return Issue[] + */ + public function getIssues() + { + return $this->issues; + } + + /** + * @param Issue[] $issues + */ + public function setIssues($issues) + { + $this->issues = $issues; + } + + /** + * @param int $ndx + * + * @return Issue + */ + public function getIssue($ndx) + { + return $this->issues[$ndx]; + } + + /** + * @return string + */ + public function getExpand() + { + return $this->expand; + } + + /** + * @param string $expand + */ + public function setExpand($expand) + { + $this->expand = $expand; + } +} diff --git a/src/Issue/IssueSearchResult.php b/src/Issue/IssueSearchResult.php index bae70a3..50a0bde 100644 --- a/src/Issue/IssueSearchResult.php +++ b/src/Issue/IssueSearchResult.php @@ -10,22 +10,7 @@ class IssueSearchResult /** * @var string */ - public $expand; - - /** - * @var int - */ - public $startAt; - - /** - * @var int - */ - public $maxResults; - - /** - * @var int - */ - public $total; + public $nextPageToken; /** * @var \JiraCloud\Issue\Issue[] @@ -33,51 +18,19 @@ class IssueSearchResult public $issues; /** - * @return int - */ - public function getStartAt() - { - return $this->startAt; - } - - /** - * @param int $startAt - */ - public function setStartAt($startAt) - { - $this->startAt = $startAt; - } - - /** - * @return int - */ - public function getMaxResults() - { - return $this->maxResults; - } - - /** - * @param int $maxResults - */ - public function setMaxResults($maxResults) - { - $this->maxResults = $maxResults; - } - - /** - * @return int + * @return string */ - public function getTotal() + public function getNextPageToken() { - return $this->total; + return $this->nextPageToken; } /** - * @param int $total + * @param string $nextPageToken */ - public function setTotal($total) + public function setNextPageToken($nextPageToken) { - $this->total = $total; + $this->nextPageToken = $nextPageToken; } /** @@ -105,20 +58,4 @@ public function getIssue($ndx) { return $this->issues[$ndx]; } - - /** - * @return string - */ - public function getExpand() - { - return $this->expand; - } - - /** - * @param string $expand - */ - public function setExpand($expand) - { - $this->expand = $expand; - } } diff --git a/src/Issue/IssueService.php b/src/Issue/IssueService.php index d0da533..71a8496 100644 --- a/src/Issue/IssueService.php +++ b/src/Issue/IssueService.php @@ -481,34 +481,94 @@ public function transition(string|int $issueIdOrKey, Transition $transition): ?s * Search issues. * * @param string $jql - * @param int $startAt + * @param string $nextPageToken * @param int $maxResults * @param array $fields - * @param array $expand - * @param bool $validateQuery + * @param string $expand + * @param array $reconcileIssues * * @throws \JsonMapper_Exception * @throws JiraException * * @return IssueSearchResult */ - public function search(string $jql, int $startAt = 0, int $maxResults = 15, array $fields = [], array $expand = [], bool $validateQuery = true): IssueSearchResult + public function search(string $jql, string $nextPageToken = '', int $maxResults = 50, array $fields = [], string $expand = '', array $reconcileIssues = []): IssueSearchResult + { + $data = [ + 'jql' => $jql, + 'maxResults' => $maxResults, + 'fields' => $fields, + 'expand' => $expand, + 'reconcileIssues' => $reconcileIssues, + ]; + + if ($nextPageToken) { + $data['nextPageToken'] = $nextPageToken; + } + + $ret = $this->exec('search//jql', json_encode($data), 'POST'); + $json = json_decode($ret); + + $result = $this->json_mapper->map( + $json, + new IssueSearchResult() + ); + + return $result; + } + + /** + * Search issues. + * + * @param string $jql + * + * @throws \JsonMapper_Exception + * @throws JiraException + * + * @return string[] array of count + * + * @phpstan-return array + */ + public function searchApproximateCount(string $jql): array + { + $data = json_encode([ + 'jql' => $jql, + ]); + + $ret = $this->exec('search//approximate-count', $data, 'POST'); + + return json_decode($ret, true); + } + + /** + * Bulk fetch issues. + * + * @param array $issueIdsOrKeys + * @param array $fields + * @param array $expand + * @param bool $fieldsByKeys + * + * @throws \JsonMapper_Exception + * @throws JiraException + * + * @return IssueBulkResult + */ + public function bulkFetch(array $issueIdsOrKeys, array $fields = [], array $expand = [], bool $fieldsByKeys = false): IssueBulkResult { $data = json_encode([ - 'jql' => $jql, - 'startAt' => $startAt, - 'maxResults' => $maxResults, - 'fields' => $fields, - 'expand' => $expand, - 'validateQuery' => $validateQuery, + 'issueIdsOrKeys' => $issueIdsOrKeys, + 'fields' => $fields, + 'expand' => $expand, + 'fieldsByKeys' => $fieldsByKeys, ]); - $ret = $this->exec('search', $data, 'POST'); + $ret = $this->exec('issue//bulkfetch', $data, 'POST'); + $json = json_decode($ret); $result = $this->json_mapper->map( $json, - new IssueSearchResult() + new IssueBulkResult() ); return $result;