123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- package gitlab
- import (
- "fmt"
- "net/url"
- )
- // timeStatsService handles communication with the time tracking related
- // methods of the GitLab API.
- //
- // GitLab docs: https://docs.gitlab.com/ce/workflow/time_tracking.html
- type timeStatsService struct {
- client *Client
- }
- // TimeStats represents the time estimates and time spent for an issue.
- //
- // GitLab docs: https://docs.gitlab.com/ce/workflow/time_tracking.html
- type TimeStats struct {
- HumanTimeEstimate string `json:"human_time_estimate"`
- HumanTotalTimeSpent string `json:"human_total_time_spent"`
- TimeEstimate int `json:"time_estimate"`
- TotalTimeSpent int `json:"total_time_spent"`
- }
- func (t TimeStats) String() string {
- return Stringify(t)
- }
- // SetTimeEstimateOptions represents the available SetTimeEstimate()
- // options.
- //
- // GitLab docs: https://docs.gitlab.com/ce/workflow/time_tracking.html
- type SetTimeEstimateOptions struct {
- Duration *string `url:"duration,omitempty" json:"duration,omitempty"`
- }
- // setTimeEstimate sets the time estimate for a single project issue.
- //
- // GitLab docs: https://docs.gitlab.com/ce/workflow/time_tracking.html
- func (s *timeStatsService) setTimeEstimate(pid interface{}, entity string, issue int, opt *SetTimeEstimateOptions, options ...OptionFunc) (*TimeStats, *Response, error) {
- project, err := parseID(pid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("projects/%s/%s/%d/time_estimate", url.QueryEscape(project), entity, issue)
- req, err := s.client.NewRequest("POST", u, opt, options)
- if err != nil {
- return nil, nil, err
- }
- t := new(TimeStats)
- resp, err := s.client.Do(req, t)
- if err != nil {
- return nil, resp, err
- }
- return t, resp, err
- }
- // resetTimeEstimate resets the time estimate for a single project issue.
- //
- // GitLab docs: https://docs.gitlab.com/ce/workflow/time_tracking.html
- func (s *timeStatsService) resetTimeEstimate(pid interface{}, entity string, issue int, options ...OptionFunc) (*TimeStats, *Response, error) {
- project, err := parseID(pid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("projects/%s/%s/%d/reset_time_estimate", url.QueryEscape(project), entity, issue)
- req, err := s.client.NewRequest("POST", u, nil, options)
- if err != nil {
- return nil, nil, err
- }
- t := new(TimeStats)
- resp, err := s.client.Do(req, t)
- if err != nil {
- return nil, resp, err
- }
- return t, resp, err
- }
- // AddSpentTimeOptions represents the available AddSpentTime() options.
- //
- // GitLab docs: https://docs.gitlab.com/ce/workflow/time_tracking.html
- type AddSpentTimeOptions struct {
- Duration *string `url:"duration,omitempty" json:"duration,omitempty"`
- }
- // addSpentTime adds spent time for a single project issue.
- //
- // GitLab docs: https://docs.gitlab.com/ce/workflow/time_tracking.html
- func (s *timeStatsService) addSpentTime(pid interface{}, entity string, issue int, opt *AddSpentTimeOptions, options ...OptionFunc) (*TimeStats, *Response, error) {
- project, err := parseID(pid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("projects/%s/%s/%d/add_spent_time", url.QueryEscape(project), entity, issue)
- req, err := s.client.NewRequest("POST", u, opt, options)
- if err != nil {
- return nil, nil, err
- }
- t := new(TimeStats)
- resp, err := s.client.Do(req, t)
- if err != nil {
- return nil, resp, err
- }
- return t, resp, err
- }
- // resetSpentTime resets the spent time for a single project issue.
- //
- // GitLab docs: https://docs.gitlab.com/ce/workflow/time_tracking.html
- func (s *timeStatsService) resetSpentTime(pid interface{}, entity string, issue int, options ...OptionFunc) (*TimeStats, *Response, error) {
- project, err := parseID(pid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("projects/%s/%s/%d/reset_spent_time", url.QueryEscape(project), entity, issue)
- req, err := s.client.NewRequest("POST", u, nil, options)
- if err != nil {
- return nil, nil, err
- }
- t := new(TimeStats)
- resp, err := s.client.Do(req, t)
- if err != nil {
- return nil, resp, err
- }
- return t, resp, err
- }
- // getTimeSpent gets the spent time for a single project issue.
- //
- // GitLab docs: https://docs.gitlab.com/ce/workflow/time_tracking.html
- func (s *timeStatsService) getTimeSpent(pid interface{}, entity string, issue int, options ...OptionFunc) (*TimeStats, *Response, error) {
- project, err := parseID(pid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("projects/%s/%s/%d/time_stats", url.QueryEscape(project), entity, issue)
- req, err := s.client.NewRequest("GET", u, nil, options)
- if err != nil {
- return nil, nil, err
- }
- t := new(TimeStats)
- resp, err := s.client.Do(req, t)
- if err != nil {
- return nil, resp, err
- }
- return t, resp, err
- }
|