From b98f213bbb0de6a7e4c4bcee2e62da0b0ff2939b Mon Sep 17 00:00:00 2001 From: fwechselberger Date: Thu, 25 Feb 2021 13:49:51 +0100 Subject: [PATCH 1/4] issue get/edit --- issues.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/issues.go b/issues.go index 32458ab..e5465dd 100644 --- a/issues.go +++ b/issues.go @@ -1,7 +1,9 @@ package taigo import ( + "errors" "fmt" + "strconv" "github.com/google/go-querystring/query" ) @@ -43,3 +45,35 @@ func (s *IssueService) CreateAttachment(attachment *Attachment, task *Task) (*At url := s.client.MakeURL(s.Endpoint, "attachments") return newfileUploadRequest(s.client, url, attachment, task) } + +func (s *IssueService) Get(issueID int) (*Issue, error) { + url := s.client.MakeURL(s.Endpoint, strconv.Itoa(issueID)) + var issue IssueDetailGET + _, err := s.client.Request.Get(url, &issue) + if err != nil { + return nil, err + } + return issue.AsIssue() +} + +func (s *IssueService) Edit(issue *Issue) (*Issue, error) { + url := s.client.MakeURL(s.Endpoint, strconv.Itoa(issue.ID)) + var responseIssue IssueDetail + + if issue.ID == 0 { + return nil, errors.New("Passed Issue does not have an ID yet. Does it exist?") + } + + // Taiga OCC + remoteIssue, err := s.Get(issue.ID) + if err != nil { + return nil, err + } + + issue.Version = remoteIssue.Version + _, err = s.client.Request.Patch(url, &issue, &responseIssue) + if err != nil { + return nil, err + } + return responseIssue.AsIssue() +} From 252ca7a83570a2496c7a973bcab0c1a3b8cc9359 Mon Sep 17 00:00:00 2001 From: fwechselberger Date: Thu, 25 Feb 2021 13:55:08 +0100 Subject: [PATCH 2/4] cleanup --- issues.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/issues.go b/issues.go index e5465dd..4fdcbe6 100644 --- a/issues.go +++ b/issues.go @@ -46,6 +46,9 @@ func (s *IssueService) CreateAttachment(attachment *Attachment, task *Task) (*At return newfileUploadRequest(s.client, url, attachment, task) } +// Get -> https://taigaio.github.io/taiga-doc/dist/api.html#issues-get +// +// Available Meta: *IssueDetailGET func (s *IssueService) Get(issueID int) (*Issue, error) { url := s.client.MakeURL(s.Endpoint, strconv.Itoa(issueID)) var issue IssueDetailGET @@ -56,6 +59,8 @@ func (s *IssueService) Get(issueID int) (*Issue, error) { return issue.AsIssue() } +// Edit sends a PATCH request to edit a Issue -> https://taigaio.github.io/taiga-doc/dist/api.html#issues-edit +// Available Meta: IssueDetail func (s *IssueService) Edit(issue *Issue) (*Issue, error) { url := s.client.MakeURL(s.Endpoint, strconv.Itoa(issue.ID)) var responseIssue IssueDetail From aec886f6406ba1fba5cdb03bcde5b288ea7de3fd Mon Sep 17 00:00:00 2001 From: fwechselberger Date: Thu, 25 Feb 2021 14:16:21 +0100 Subject: [PATCH 3/4] omit empty in issue struct --- issues.models.go | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/issues.models.go b/issues.models.go index b8152ab..262a3e2 100644 --- a/issues.models.go +++ b/issues.models.go @@ -23,30 +23,30 @@ func genericToIssues(anyIssueObjectSlice interface{}) []Issue { // Issue represents the mandatory fields of an Issue only type Issue struct { TaigaBaseObject - ID int `json:"id"` - Ref int `json:"ref"` - Version int `json:"version"` - AssignedTo int `json:"assigned_to"` - BlockedNote string `json:"blocked_note"` - Description string `json:"description"` - IsBlocked bool `json:"is_blocked"` - IsClosed bool `json:"is_closed"` - Milestone int `json:"milestone"` - Owner int `json:"owner"` - Priority int `json:"priority"` + ID int `json:"id,omitempty"` + Ref int `json:"ref,omitempty"` + Version int `json:"version,omitempty"` + AssignedTo int `json:"assigned_to,omitempty"` + BlockedNote string `json:"blocked_note,omitempty"` + Description string `json:"description,omitempty"` + IsBlocked bool `json:"is_blocked,omitempty"` + IsClosed bool `json:"is_closed,omitempty"` + Milestone int `json:"milestone,omitempty"` + Owner int `json:"owner,omitempty"` + Priority int `json:"priority,omitempty"` Project int `json:"project"` - Severity int `json:"severity"` - Status int `json:"status"` + Severity int `json:"severity,omitempty"` + Status int `json:"status,omitempty"` Subject string `json:"subject"` - Tags Tags `json:"tags"` - Type int `json:"type"` - Watchers []int `json:"watchers"` - CreatedDate time.Time `json:"created_date"` - ModifiedDate time.Time `json:"modified_date"` - FinishedDate time.Time `json:"finished_date"` - DueDate string `json:"due_date"` - DueDateReason string `json:"due_date_reason"` - DueDateStatus string `json:"due_date_status"` + Tags Tags `json:"tags,omitempty"` + Type int `json:"type,omitempty"` + Watchers []int `json:"watchers,omitempty"` + CreatedDate time.Time `json:"created_date,omitempty"` + ModifiedDate time.Time `json:"modified_date,omitempty"` + FinishedDate time.Time `json:"finished_date,omitempty"` + DueDate string `json:"due_date,omitempty"` + DueDateReason string `json:"due_date_reason,omitempty"` + DueDateStatus string `json:"due_date_status,omitempty"` IssueDetail *IssueDetail IssueDetailGET *IssueDetailGET IssueDetailLIST *IssueDetailLIST From 24082bb451e83c8da8507f05ac38c13dcaed0ec3 Mon Sep 17 00:00:00 2001 From: fwechselberger Date: Fri, 26 Feb 2021 11:20:03 +0100 Subject: [PATCH 4/4] create issue impl --- issues.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/issues.go b/issues.go index 4fdcbe6..8d8436b 100644 --- a/issues.go +++ b/issues.go @@ -82,3 +82,24 @@ func (s *IssueService) Edit(issue *Issue) (*Issue, error) { } return responseIssue.AsIssue() } + +// Create creates a new Issue | https://taigaio.github.io/taiga-doc/dist/api.html#issues-create +// +// Available Meta: *IssueDetail +func (s *IssueService) Create(issue *Issue) (*Issue, error) { + url := s.client.MakeURL(s.Endpoint) + var issueDetail IssueDetail + + // Check for required fields + // project, subject + if isEmpty(issue.Project) || isEmpty(issue.Subject) { + return nil, errors.New("A mandatory field is missing. See API documentataion") + } + + _, err := s.client.Request.Post(url, &issue, &issueDetail) + if err != nil { + return nil, err + } + + return issueDetail.AsIssue() +}