2018-06-02 00:37:01 +00:00
package jira
import (
"fmt"
2020-09-14 18:31:56 +00:00
2018-06-02 00:37:01 +00:00
"github.com/google/go-querystring/query"
)
// SprintService handles sprints in JIRA Agile API.
// See https://docs.atlassian.com/jira-software/REST/cloud/
type SprintService struct {
client * Client
}
// IssuesWrapper represents a wrapper struct for moving issues to sprint
type IssuesWrapper struct {
Issues [ ] string ` json:"issues" `
}
// IssuesInSprintResult represents a wrapper struct for search result
type IssuesInSprintResult struct {
Issues [ ] Issue ` json:"issues" `
}
// MoveIssuesToSprint moves issues to a sprint, for a given sprint Id.
// Issues can only be moved to open or active sprints.
// The maximum number of issues that can be moved in one operation is 50.
//
// JIRA API docs: https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/sprint-moveIssuesToSprint
func ( s * SprintService ) MoveIssuesToSprint ( sprintID int , issueIDs [ ] string ) ( * Response , error ) {
apiEndpoint := fmt . Sprintf ( "rest/agile/1.0/sprint/%d/issue" , sprintID )
payload := IssuesWrapper { Issues : issueIDs }
req , err := s . client . NewRequest ( "POST" , apiEndpoint , payload )
if err != nil {
return nil , err
}
resp , err := s . client . Do ( req , nil )
if err != nil {
err = NewJiraError ( resp , err )
}
return resp , err
}
// GetIssuesForSprint returns all issues in a sprint, for a given sprint Id.
// This only includes issues that the user has permission to view.
// By default, the returned issues are ordered by rank.
//
// JIRA API Docs: https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/sprint-getIssuesForSprint
func ( s * SprintService ) GetIssuesForSprint ( sprintID int ) ( [ ] Issue , * Response , error ) {
apiEndpoint := fmt . Sprintf ( "rest/agile/1.0/sprint/%d/issue" , sprintID )
req , err := s . client . NewRequest ( "GET" , apiEndpoint , nil )
if err != nil {
return nil , nil , err
}
result := new ( IssuesInSprintResult )
resp , err := s . client . Do ( req , result )
if err != nil {
err = NewJiraError ( resp , err )
}
return result . Issues , resp , err
}
2020-09-14 18:31:56 +00:00
// GetIssue returns a full representation of the issue for the given issue key.
2018-06-02 00:37:01 +00:00
// JIRA will attempt to identify the issue by the issueIdOrKey path parameter.
// This can be an issue id, or an issue key.
// If the issue cannot be found via an exact match, JIRA will also look for the issue in a case-insensitive way, or by looking to see if the issue was moved.
//
// The given options will be appended to the query string
//
// JIRA API docs: https://docs.atlassian.com/jira-software/REST/7.3.1/#agile/1.0/issue-getIssue
//
// TODO: create agile service for holding all agile apis' implementation
func ( s * SprintService ) GetIssue ( issueID string , options * GetQueryOptions ) ( * Issue , * Response , error ) {
apiEndpoint := fmt . Sprintf ( "rest/agile/1.0/issue/%s" , issueID )
req , err := s . client . NewRequest ( "GET" , apiEndpoint , nil )
if err != nil {
return nil , nil , err
}
if options != nil {
q , err := query . Values ( options )
if err != nil {
return nil , nil , err
}
req . URL . RawQuery = q . Encode ( )
}
issue := new ( Issue )
resp , err := s . client . Do ( req , issue )
if err != nil {
jerr := NewJiraError ( resp , err )
return nil , resp , jerr
}
return issue , resp , nil
}