...

Source file src/github.com/xanzy/go-gitlab/resource_state_events.go

Documentation: github.com/xanzy/go-gitlab

     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, nil
    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, nil
   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, nil
   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, nil
   154  }
   155  

View as plain text