123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- 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)
- }
|