From c6d5bc1fc858db7707c66fd7ca7dc2eb04a02f01 Mon Sep 17 00:00:00 2001 From: Yves Biener Date: Wed, 18 Oct 2023 17:47:42 +0200 Subject: [PATCH] add(gitea-api): issue and milestone updating This implements the api patches for updating an issue or milestone for a given repository and issue or milestone. WIP for #1. --- internal/gitea/issue.go | 24 ++++++++++++++++++++++++ internal/gitea/milestone.go | 19 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/internal/gitea/issue.go b/internal/gitea/issue.go index e47b399..a306e93 100644 --- a/internal/gitea/issue.go +++ b/internal/gitea/issue.go @@ -1,6 +1,7 @@ package gitea import ( + "bytes" "encoding/json" "fmt" "net/http" @@ -73,3 +74,26 @@ func (gitea *Gitea) GetIssue(repo Repository, id uint) (Issue, error) { } return issue, nil } + +func (gitea *Gitea) UpdateIssue(repo Repository, issue Issue) error { + url := fmt.Sprintf("%s/repos/%s/issues/%d", gitea.Url(), repo.Full_name, issue.Id) + var payload map[string]interface{} + payload["assignee"] = issue.Assignee + payload["assignees"] = issue.Assignees + payload["body"] = issue.Body + payload["due_date"] = issue.Due_date + payload["milestone"] = issue.Milestone + payload["ref"] = issue.Ref + payload["state"] = issue.State + payload["title"] = issue.Title + payload["unset_due_date"] = issue.Due_date.Unix() == 0 + json, err := json.Marshal(&payload) + if err != nil { + return err + } + _, err = http.NewRequest(http.MethodPatch, url, bytes.NewBuffer(json)) + if err != nil { + return err + } + return nil +} diff --git a/internal/gitea/milestone.go b/internal/gitea/milestone.go index 3b8e0dc..9f58f74 100644 --- a/internal/gitea/milestone.go +++ b/internal/gitea/milestone.go @@ -1,6 +1,7 @@ package gitea import ( + "bytes" "encoding/json" "fmt" "net/http" @@ -53,3 +54,21 @@ func (gitea *Gitea) GetMilestone(repo Repository, id uint) (Milestone, error) { } return milestone, nil } + +func (gitea *Gitea) UpdateMilestone(repo Repository, milestone Milestone) error { + url := fmt.Sprintf("%s/repos/%s/milestones/%d", gitea.Url(), repo.Full_name, milestone.Id) + var payload map[string]interface{} + payload["description"] = milestone.Description + payload["due_on"] = milestone.Due_on + payload["state"] = milestone.State + payload["title"] = milestone.Title + json, err := json.Marshal(&payload) + if err != nil { + return err + } + _, err = http.NewRequest(http.MethodPatch, url, bytes.NewBuffer(json)) + if err != nil { + return err + } + return nil +}