Skip to content

Commit 4fe7165

Browse files
authored
Merge pull request xanzy#1062 from 5nord/add-resource-state-events-service
Add ResourceStateEvent service
2 parents c86f871 + b259111 commit 4fe7165

File tree

2 files changed

+156
-0
lines changed

2 files changed

+156
-0
lines changed

gitlab.go

+2
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ type Client struct {
167167
Repositories *RepositoriesService
168168
RepositoryFiles *RepositoryFilesService
169169
ResourceLabelEvents *ResourceLabelEventsService
170+
ResourceStateEvents *ResourceStateEventsService
170171
Runners *RunnersService
171172
Search *SearchService
172173
Services *ServicesService
@@ -336,6 +337,7 @@ func newClient(options ...ClientOptionFunc) (*Client, error) {
336337
c.Repositories = &RepositoriesService{client: c}
337338
c.RepositoryFiles = &RepositoryFilesService{client: c}
338339
c.ResourceLabelEvents = &ResourceLabelEventsService{client: c}
340+
c.ResourceStateEvents = &ResourceStateEventsService{client: c}
339341
c.Runners = &RunnersService{client: c}
340342
c.Search = &SearchService{client: c}
341343
c.Services = &ServicesService{client: c}

resource_state_events.go

+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
//
2+
// Copyright 2021, Matthias Simon
3+
//
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
//
8+
// http://www.apache.org/licenses/LICENSE-2.0
9+
//
10+
// Unless required by applicable law or agreed to in writing, software
11+
// distributed under the License is distributed on an "AS IS" BASIS,
12+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
// See the License for the specific language governing permissions and
14+
// limitations under the License.
15+
//
16+
17+
package gitlab
18+
19+
import (
20+
"fmt"
21+
"net/http"
22+
"time"
23+
)
24+
25+
// ResourceStateEventsService handles communication with the event related
26+
// methods of the GitLab API.
27+
//
28+
// GitLab API docs: https://docs.gitlab.com/ee/api/resource_state_events.html
29+
type ResourceStateEventsService struct {
30+
client *Client
31+
}
32+
33+
// StateEvent represents a resource state event.
34+
//
35+
// GitLab API docs: https://docs.gitlab.com/ee/api/resource_state_events.html
36+
type StateEvent struct {
37+
ID int `json:"id"`
38+
User *BasicUser `json:"user"`
39+
CreatedAt *time.Time `json:"created_at"`
40+
ResourceType string `json:"resource_type"`
41+
ResourceID int `json:"resource_id"`
42+
State EventTypeValue `json:"state"`
43+
}
44+
45+
// ListStateEventsOptions represents the options for all resource state events
46+
// list methods.
47+
//
48+
// GitLab API docs:
49+
// https://docs.gitlab.com/ee/api/resource_state_events.html#list-project-issue-state-events
50+
type ListStateEventsOptions struct {
51+
ListOptions
52+
}
53+
54+
// ListIssueStateEvents retrieves resource state events for the specified
55+
// project and issue.
56+
//
57+
// GitLab API docs:
58+
// https://docs.gitlab.com/ee/api/resource_state_events.html#list-project-issue-state-events
59+
func (s *ResourceStateEventsService) ListIssueStateEvents(pid interface{}, issue int, opt *ListStateEventsOptions, options ...RequestOptionFunc) ([]*StateEvent, *Response, error) {
60+
project, err := parseID(pid)
61+
if err != nil {
62+
return nil, nil, err
63+
}
64+
u := fmt.Sprintf("projects/%s/issues/%d/resource_state_events", pathEscape(project), issue)
65+
66+
req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
67+
if err != nil {
68+
return nil, nil, err
69+
}
70+
71+
var ses []*StateEvent
72+
resp, err := s.client.Do(req, &ses)
73+
if err != nil {
74+
return nil, resp, err
75+
}
76+
77+
return ses, resp, err
78+
}
79+
80+
// GetIssueStateEvent gets a single issue-state-event.
81+
//
82+
// GitLab API docs:
83+
// https://docs.gitlab.com/ee/api/resource_state_events.html#get-single-issue-state-event
84+
func (s *ResourceStateEventsService) GetIssueStateEvent(pid interface{}, issue int, event int, options ...RequestOptionFunc) (*StateEvent, *Response, error) {
85+
project, err := parseID(pid)
86+
if err != nil {
87+
return nil, nil, err
88+
}
89+
u := fmt.Sprintf("projects/%s/issues/%d/resource_state_events/%d", pathEscape(project), issue, event)
90+
91+
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
92+
if err != nil {
93+
return nil, nil, err
94+
}
95+
96+
se := new(StateEvent)
97+
resp, err := s.client.Do(req, se)
98+
if err != nil {
99+
return nil, resp, err
100+
}
101+
102+
return se, resp, err
103+
}
104+
105+
// ListMergeStateEvents retrieves resource state events for the specified
106+
// project and merge request.
107+
//
108+
// GitLab API docs:
109+
// https://docs.gitlab.com/ee/api/resource_state_events.html#list-project-merge-request-state-events
110+
func (s *ResourceStateEventsService) ListMergeStateEvents(pid interface{}, request int, opt *ListStateEventsOptions, options ...RequestOptionFunc) ([]*StateEvent, *Response, error) {
111+
project, err := parseID(pid)
112+
if err != nil {
113+
return nil, nil, err
114+
}
115+
u := fmt.Sprintf("projects/%s/merge_requests/%d/resource_state_events", pathEscape(project), request)
116+
117+
req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
118+
if err != nil {
119+
return nil, nil, err
120+
}
121+
122+
var ses []*StateEvent
123+
resp, err := s.client.Do(req, &ses)
124+
if err != nil {
125+
return nil, resp, err
126+
}
127+
128+
return ses, resp, err
129+
}
130+
131+
// GetMergeRequestStateEvent gets a single merge request state event.
132+
//
133+
// GitLab API docs:
134+
// https://docs.gitlab.com/ee/api/resource_state_events.html#get-single-merge-request-state-event
135+
func (s *ResourceStateEventsService) GetMergeRequestStateEvent(pid interface{}, request int, event int, options ...RequestOptionFunc) (*StateEvent, *Response, error) {
136+
project, err := parseID(pid)
137+
if err != nil {
138+
return nil, nil, err
139+
}
140+
u := fmt.Sprintf("projects/%s/merge_requests/%d/resource_state_events/%d", pathEscape(project), request, event)
141+
142+
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
143+
if err != nil {
144+
return nil, nil, err
145+
}
146+
147+
se := new(StateEvent)
148+
resp, err := s.client.Do(req, se)
149+
if err != nil {
150+
return nil, resp, err
151+
}
152+
153+
return se, resp, err
154+
}

0 commit comments

Comments
 (0)