/
pull_requests_activities.go
94 lines (77 loc) · 3.36 KB
/
pull_requests_activities.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package bitbucket
import (
"fmt"
"github.com/davidji99/simpleresty"
"time"
)
const (
// UpdateActivity represents an update activity to a pull request.
UpdateActivity = "update"
// ApprovalActivity represents an update activity to a pull request.
ApprovalActivity = "approval"
)
// PRActivities represents a collection of of pull request activity.
type PRActivities struct {
PaginationInfo
Values []*PRActivity `json:"values,omitempty"`
}
// PRActivity represents a pull request activity.
type PRActivity struct {
Update *PRUpdateActivity `json:"update,omitempty"`
Approval *PRApprovalActivity `json:"approval,omitempty"`
PullRequest *PullRequest `json:"pull_request,omitempty"`
}
// PRUpdateActivity represents a pull request update activity.
type PRUpdateActivity struct {
Description *string `json:"description,omitempty"`
Title *string `json:"title,omitempty"`
Destination *PullRequestBranch `json:"destination,omitempty"`
Reason *string `json:"reason,omitempty"`
Source *PullRequestBranch `json:"source,omitempty"`
State *string `json:"state,omitempty"`
Author *User `json:"author,omitempty"`
Date *time.Time `json:"date,omitempty"`
}
// PRApprovalActivity represents a pull request approval activity.
type PRApprovalActivity struct {
Date *time.Time `json:"date,omitempty"`
PullRequest *PullRequest `json:"pull_request,omitempty"`
User *User `json:"user,omitempty"`
}
// ListActivity returns a paginated list of all pull requests' activity log on a specified repository.
//
// Bitbucket API docs: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/pullrequests/activity#get
func (p *PullRequestsService) ListActivity(owner, repoSlug string, opts ...interface{}) (*PRActivities, *simpleresty.Response, error) {
result := new(PRActivities)
urlStr, urlStrErr := p.client.http.RequestURLWithQueryParams(
fmt.Sprintf("/repositories/%s/%s/pullrequests/activity", owner, repoSlug), opts...)
if urlStrErr != nil {
return nil, nil, urlStrErr
}
response, err := p.client.http.Get(urlStr, result, nil)
return result, response, err
}
// GetActivity returns a paginated list of a single pull request's activity log in a repository.
//
// Bitbucket API docs: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/pullrequests/%7Bpull_request_id%7D/activity#get
func (p *PullRequestsService) GetActivity(owner, repoSlug string, pullRequestID int64, opts ...interface{}) (*PRActivities, *simpleresty.Response, error) {
result := new(PRActivities)
urlStr, urlStrErr := p.client.http.RequestURLWithQueryParams(
fmt.Sprintf("/repositories/%s/%s/pullrequests/%v/activity", owner, repoSlug, pullRequestID), opts...)
if urlStrErr != nil {
return nil, nil, urlStrErr
}
response, err := p.client.http.Get(urlStr, result, nil)
return result, response, err
}
// GetActivityType returns the non-nil field representing the activity: an update or approval.
// It returns the activity object and its type.
func (p *PRActivity) GetActivityType() (interface{}, string) {
if v := p.GetUpdate(); v != nil {
return p.GetUpdate(), UpdateActivity
}
if v := p.GetApproval(); v != nil {
return p.GetUpdate(), ApprovalActivity
}
return nil, ""
}