-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathepic_status.go
More file actions
118 lines (109 loc) · 3.43 KB
/
epic_status.go
File metadata and controls
118 lines (109 loc) · 3.43 KB
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package taigo
import (
"errors"
"net/http"
"strconv"
)
// EpicStatusService is a handle to actions related to epic statuses.
type EpicStatusService struct {
client *Client
defaultProjectID int
Endpoint string
}
// List -> https://docs.taiga.io/api.html#epic-statuses-list
func (s *EpicStatusService) List(queryParams *ProjectIDQueryParams) ([]EpicStatus, error) {
url := s.client.MakeURL(s.Endpoint)
url, err := urlWithQueryOrDefaultProject(url, queryParams, s.defaultProjectID)
if err != nil {
return nil, err
}
var statuses []EpicStatus
_, err = s.client.Request.Get(url, &statuses)
if err != nil {
return nil, err
}
return statuses, nil
}
// Get -> https://docs.taiga.io/api.html#epic-statuses-get
func (s *EpicStatusService) Get(statusID int) (*EpicStatus, error) {
if err := requirePositiveID("statusID", statusID); err != nil {
return nil, err
}
url := s.client.MakeURL(s.Endpoint, strconv.Itoa(statusID))
var status EpicStatus
_, err := s.client.Request.Get(url, &status)
if err != nil {
return nil, err
}
return &status, nil
}
// Create -> https://docs.taiga.io/api.html#epic-statuses-create
func (s *EpicStatusService) Create(request *EpicStatusCreateRequest) (*EpicStatus, error) {
if err := requireNonNil("request", request); err != nil {
return nil, err
}
url := s.client.MakeURL(s.Endpoint)
var responseStatus EpicStatus
projectID, err := resolveProjectID(request.Project, s.defaultProjectID, "project")
if err != nil {
return nil, err
}
if isEmpty(request.Name) {
return nil, errors.New("a mandatory field(project, name) is missing. See API documentation")
}
payload := *request
payload.Project = projectID
_, err = s.client.Request.Post(url, &payload, &responseStatus)
if err != nil {
return nil, err
}
return &responseStatus, nil
}
// Edit -> https://docs.taiga.io/api.html#epic-statuses-edit
func (s *EpicStatusService) Edit(statusID int, request *EpicStatusEditRequest) (*EpicStatus, error) {
if err := requireNonNil("request", request); err != nil {
return nil, err
}
if err := requirePositiveID("statusID", statusID); err != nil {
return nil, err
}
url := s.client.MakeURL(s.Endpoint, strconv.Itoa(statusID))
var responseStatus EpicStatus
payload, err := sparsePatchMapFromStruct(request)
if err != nil {
return nil, err
}
_, err = s.client.Request.Patch(url, &payload, &responseStatus)
if err != nil {
return nil, err
}
return &responseStatus, nil
}
// Patch sends an explicit PATCH payload to edit an epic status.
func (s *EpicStatusService) Patch(statusID int, patch *EpicStatusPatch) (*EpicStatus, error) {
if err := requireNonNil("patch", patch); err != nil {
return nil, err
}
if err := requirePositiveID("statusID", statusID); err != nil {
return nil, err
}
url := s.client.MakeURL(s.Endpoint, strconv.Itoa(statusID))
var responseStatus EpicStatus
_, err := s.client.Request.Patch(url, patch, &responseStatus)
if err != nil {
return nil, err
}
return &responseStatus, nil
}
// Update is an alias for Edit.
func (s *EpicStatusService) Update(statusID int, request *EpicStatusEditRequest) (*EpicStatus, error) {
return s.Edit(statusID, request)
}
// Delete -> https://docs.taiga.io/api.html#epic-statuses-delete
func (s *EpicStatusService) Delete(statusID int) (*http.Response, error) {
if err := requirePositiveID("statusID", statusID); err != nil {
return nil, err
}
url := s.client.MakeURL(s.Endpoint, strconv.Itoa(statusID))
return s.client.Request.Delete(url)
}