Example #1
0
        /// <summary>
        ///     Search for issues, with a JQL (e.g. from a filter)
        ///     See: https://docs.atlassian.com/jira/REST/latest/#d2e2713
        /// </summary>
        /// <param name="jiraClient">IIssueDomain to bind the extension method to</param>
        /// <param name="jql">Jira Query Language, like SQL, for the search</param>
        /// <param name="page">Page with paging information, default this starts at the beginning with a maxResults of 20</param>
        /// <param name="fields">Jira fields to include, if null the defaults from the JiraConfig.SearchFields are taken</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>SearchIssuesResult</returns>
        public static Task <SearchIssuesResult <Issue, JqlIssueSearch> > SearchAsync(this IIssueDomain jiraClient, string jql, Page page = null, IEnumerable <string> fields = null,
                                                                                     CancellationToken cancellationToken = default(CancellationToken))
        {
            if (jql == null)
            {
                throw new ArgumentNullException(nameof(jql));
            }

            var search = new JqlIssueSearch
            {
                Jql           = jql,
                ValidateQuery = true,
                MaxResults    = page?.MaxResults ?? 20,
                StartAt       = page?.StartAt ?? 0,
                Fields        = fields ?? new List <string>(JiraConfig.SearchFields)
            };

            return(jiraClient.SearchAsync(search, cancellationToken));
        }
Example #2
0
        /// <summary>
        ///     Search for issues, with a JQL (e.g. from a filter)
        ///     See: https://docs.atlassian.com/jira/REST/latest/#d2e2713
        /// </summary>
        /// <param name="jiraClient">IIssueDomain to bind the extension method to</param>
        /// <param name="search">The search arguments</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>SearchIssuesResult</returns>
        public static async Task <SearchIssuesResult <Issue, JqlIssueSearch> > SearchAsync(this IIssueDomain jiraClient, JqlIssueSearch search, CancellationToken cancellationToken = default)
        {
            if (search == null)
            {
                throw new ArgumentNullException(nameof(search));
            }

            Log.Debug().WriteLine("Searching via JQL: {0}", search.Jql);

            jiraClient.Behaviour.MakeCurrent();
            var searchUri = jiraClient.JiraRestUri.AppendSegments("search");

            var response = await searchUri
                           .PostAsync <HttpResponse <SearchIssuesResult <Issue, JqlIssueSearch>, Error> >(search, cancellationToken)
                           .ConfigureAwait(false);

            var result = response.HandleErrors();

            // Store the original search parameter
            result.SearchParameter = search;
            return(result);
        }
Example #3
0
        /// <summary>
        ///     Search for issues, with a JQL (e.g. from a filter)
        ///     See: https://docs.atlassian.com/jira/REST/latest/#d2e2713
        /// </summary>
        /// <param name="jiraClient">IIssueDomain to bind the extension method to</param>
        /// <param name="search">Search information, with Jira Query Language, like SQL, for the search</param>
        /// <param name="page">Page with paging information, overwriting the page info in the search.</param>
        /// <param name="fields">Jira fields to include, if null the defaults from the JiraConfig.SearchFields are taken</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>SearchIssuesResult</returns>
        public static Task <SearchIssuesResult <Issue, JqlIssueSearch> > SearchAsync(this IIssueDomain jiraClient, JqlIssueSearch search, Page page = null, IEnumerable <string> fields = null,
                                                                                     CancellationToken cancellationToken = default)
        {
            if (search == null)
            {
                throw new ArgumentNullException(nameof(search));
            }

            if (page != null)
            {
                search.MaxResults = page.MaxResults ?? 20;
                search.StartAt    = page.StartAt ?? 0;
            }
            return(jiraClient.SearchAsync(search, cancellationToken));
        }
Example #4
0
        /// <summary>
        ///     Search for issues, with a JQL (e.g. from a filter)
        ///     See: https://docs.atlassian.com/jira/REST/latest/#d2e2713
        /// </summary>
        /// <param name="jiraClient">IIssueDomain to bind the extension method to</param>
        /// <param name="search">The search arguments</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>SearchIssuesResult</returns>
        public static async Task <SearchIssuesResult <Issue, JqlIssueSearch> > SearchAsync(this IIssueDomain jiraClient, JqlIssueSearch search, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (search == null)
            {
                throw new ArgumentNullException(nameof(search));
            }

            Log.Debug().WriteLine("Searching via JQL: {0}", search.Jql);

            jiraClient.Behaviour.MakeCurrent();
            var searchUri = jiraClient.JiraRestUri.AppendSegments("search");

            // Add the configurable expand values, if the value is not null or empty
            if (JiraConfig.ExpandSearch?.Length > 0)
            {
                searchUri = searchUri.ExtendQuery("expand", string.Join(",", JiraConfig.ExpandSearch));
            }

            var response = await searchUri.PostAsync <HttpResponse <SearchIssuesResult <Issue, JqlIssueSearch>, Error> >(search, cancellationToken).ConfigureAwait(false);

            var result = response.HandleErrors();

            // Store the original search parameter
            result.SearchParameter = search;
            return(result);
        }