aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/xanzy/go-gitlab/todos.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/xanzy/go-gitlab/todos.go')
-rw-r--r--vendor/github.com/xanzy/go-gitlab/todos.go175
1 files changed, 175 insertions, 0 deletions
diff --git a/vendor/github.com/xanzy/go-gitlab/todos.go b/vendor/github.com/xanzy/go-gitlab/todos.go
new file mode 100644
index 0000000..db58edd
--- /dev/null
+++ b/vendor/github.com/xanzy/go-gitlab/todos.go
@@ -0,0 +1,175 @@
+package gitlab
+
+import "time"
+import "fmt"
+
+// TodosService handles communication with the todos related methods of
+// the Gitlab API.
+//
+// GitLab API docs: https://docs.gitlab.com/ce/api/todos.html
+type TodosService struct {
+ client *Client
+}
+
+// TodoAction represents the available actions that can be performed on a todo.
+//
+// GitLab API docs: https://docs.gitlab.com/ce/api/todos.html
+type TodoAction string
+
+// The available todo actions.
+const (
+ TodoAssigned TodoAction = "assigned"
+ TodoMentioned TodoAction = "mentioned"
+ TodoBuildFailed TodoAction = "build_failed"
+ TodoMarked TodoAction = "marked"
+ TodoApprovalRequired TodoAction = "approval_required"
+ TodoDirectlyAddressed TodoAction = "directly_addressed"
+)
+
+// TodoTarget represents a todo target of type Issue or MergeRequest
+type TodoTarget struct {
+ // TODO: replace both Assignee and Author structs with v4 User struct
+ Assignee struct {
+ Name string `json:"name"`
+ Username string `json:"username"`
+ ID int `json:"id"`
+ State string `json:"state"`
+ AvatarURL string `json:"avatar_url"`
+ WebURL string `json:"web_url"`
+ } `json:"assignee"`
+ Author struct {
+ Name string `json:"name"`
+ Username string `json:"username"`
+ ID int `json:"id"`
+ State string `json:"state"`
+ AvatarURL string `json:"avatar_url"`
+ WebURL string `json:"web_url"`
+ } `json:"author"`
+ CreatedAt *time.Time `json:"created_at"`
+ Description string `json:"description"`
+ Downvotes int `json:"downvotes"`
+ ID int `json:"id"`
+ IID int `json:"iid"`
+ Labels []string `json:"labels"`
+ Milestone Milestone `json:"milestone"`
+ ProjectID int `json:"project_id"`
+ State string `json:"state"`
+ Subscribed bool `json:"subscribed"`
+ Title string `json:"title"`
+ UpdatedAt *time.Time `json:"updated_at"`
+ Upvotes int `json:"upvotes"`
+ UserNotesCount int `json:"user_notes_count"`
+ WebURL string `json:"web_url"`
+
+ // Only available for type Issue
+ Confidential bool `json:"confidential"`
+ DueDate string `json:"due_date"`
+ Weight int `json:"weight"`
+
+ // Only available for type MergeRequest
+ ApprovalsBeforeMerge bool `json:"approvals_before_merge"`
+ ForceRemoveSourceBranch bool `json:"force_remove_source_branch"`
+ MergeCommitSha string `json:"merge_commit_sha"`
+ MergeWhenPipelineSucceeds bool `json:"merge_when_pipeline_succeeds"`
+ MergeStatus string `json:"merge_status"`
+ Sha string `json:"sha"`
+ ShouldRemoveSourceBranch bool `json:"should_remove_source_branch"`
+ SourceBranch string `json:"source_branch"`
+ SourceProjectID int `json:"source_project_id"`
+ Squash bool `json:"squash"`
+ TargetBranch string `json:"target_branch"`
+ TargetProjectID int `json:"target_project_id"`
+ WorkInProgress bool `json:"work_in_progress"`
+}
+
+// Todo represents a GitLab todo.
+//
+// GitLab API docs: https://docs.gitlab.com/ce/api/todos.html
+type Todo struct {
+ ID int `json:"id"`
+ Project struct {
+ ID int `json:"id"`
+ HTTPURLToRepo string `json:"http_url_to_repo"`
+ WebURL string `json:"web_url"`
+ Name string `json:"name"`
+ NameWithNamespace string `json:"name_with_namespace"`
+ Path string `json:"path"`
+ PathWithNamespace string `json:"path_with_namespace"`
+ } `json:"project"`
+ Author struct {
+ ID int `json:"id"`
+ Name string `json:"name"`
+ Username string `json:"username"`
+ State string `json:"state"`
+ AvatarURL string `json:"avatar_url"`
+ WebURL string `json:"web_url"`
+ } `json:"author"`
+ ActionName TodoAction `json:"action_name"`
+ TargetType string `json:"target_type"`
+ Target TodoTarget `json:"target"`
+ TargetURL string `json:"target_url"`
+ Body string `json:"body"`
+ State string `json:"state"`
+ CreatedAt *time.Time `json:"created_at"`
+}
+
+func (t Todo) String() string {
+ return Stringify(t)
+}
+
+// ListTodosOptions represents the available ListTodos() options.
+//
+// GitLab API docs: https://docs.gitlab.com/ce/api/todos.html#get-a-list-of-todos
+type ListTodosOptions struct {
+ Action *TodoAction `url:"action,omitempty" json:"action,omitempty"`
+ AuthorID *int `url:"author_id,omitempty" json:"author_id,omitempty"`
+ ProjectID *int `url:"project_id,omitempty" json:"project_id,omitempty"`
+ State *string `url:"state,omitempty" json:"state,omitempty"`
+ Type *string `url:"type,omitempty" json:"type,omitempty"`
+}
+
+// ListTodos lists all todos created by authenticated user.
+// When no filter is applied, it returns all pending todos for the current user.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/todos.html#get-a-list-of-todos
+func (s *TodosService) ListTodos(opt *ListTodosOptions, options ...OptionFunc) ([]*Todo, *Response, error) {
+ req, err := s.client.NewRequest("GET", "todos", opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var t []*Todo
+ resp, err := s.client.Do(req, &t)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return t, resp, err
+}
+
+// MarkTodoAsDone marks a single pending todo given by its ID for the current user as done.
+//
+// GitLab API docs: https://docs.gitlab.com/ce/api/todos.html#mark-a-todo-as-done
+func (s *TodosService) MarkTodoAsDone(id int, options ...OptionFunc) (*Response, error) {
+ u := fmt.Sprintf("todos/%d/mark_as_done", id)
+
+ req, err := s.client.NewRequest("POST", u, nil, options)
+ if err != nil {
+ return nil, err
+ }
+
+ return s.client.Do(req, nil)
+}
+
+// MarkAllTodosAsDone marks all pending todos for the current user as done.
+//
+// GitLab API docs: https://docs.gitlab.com/ce/api/todos.html#mark-all-todos-as-done
+func (s *TodosService) MarkAllTodosAsDone(options ...OptionFunc) (*Response, error) {
+ req, err := s.client.NewRequest("POST", "todos/mark_as_done", nil, options)
+ if err != nil {
+ return nil, err
+ }
+
+ return s.client.Do(req, nil)
+}