From 0e6efacd13d52de9571c4300aed0ebd2f0ac87fb Mon Sep 17 00:00:00 2001 From: Yves Biener Date: Wed, 18 Oct 2023 22:49:25 +0200 Subject: [PATCH] add(gitea-api): creation for issues, milestones and comments This implements the post api functions for issues, milestones and comments which are added to the gitea repository. --- internal/gitea/comment.go | 23 +++++++++++++++++++++++ internal/gitea/issue.go | 31 +++++++++++++++++++++++++++++++ internal/gitea/milestone.go | 26 ++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) diff --git a/internal/gitea/comment.go b/internal/gitea/comment.go index 5fcc538..bc528b1 100644 --- a/internal/gitea/comment.go +++ b/internal/gitea/comment.go @@ -70,3 +70,26 @@ func (gitea *Gitea) UpdateComment(repo Repository, comment Comment) error { } return nil } + +func (gitea *Gitea) NewComment(repo Repository, issue Issue, comment Comment) (Comment, error) { + url := fmt.Sprintf("%s/repos/%s/issues/%d/comments", gitea.Url(), repo.Full_name, issue.Id) + payload, err := json.Marshal(&map[string]interface{}{ + "body": comment.Body, + }) + var res Comment + if err != nil { + return res, err + } + response, err := http.Post(url, "application/json", bytes.NewBuffer(payload)) + if err != nil { + return res, nil + } + defer response.Body.Close() + decoder := json.NewDecoder(response.Body) + // NOTE: remove this if I do not want to store everything from the json result in the struct + decoder.DisallowUnknownFields() // remain if every field shall be extracted + if err = decoder.Decode(&res); err != nil { + return res, err + } + return res, nil +} diff --git a/internal/gitea/issue.go b/internal/gitea/issue.go index a306e93..668e0dc 100644 --- a/internal/gitea/issue.go +++ b/internal/gitea/issue.go @@ -97,3 +97,34 @@ func (gitea *Gitea) UpdateIssue(repo Repository, issue Issue) error { } return nil } + +func (gitea *Gitea) NewIssue(repo Repository, issue Issue) (Issue, error) { + url := fmt.Sprintf("%s/repos/%s/issues", gitea.Url(), repo.Full_name) + var payload map[string]interface{} + payload["assignee"] = issue.Assignee + payload["assignees"] = issue.Assignees + payload["body"] = issue.Body + payload["closed"] = issue.State == "closed" + payload["due_date"] = issue.Due_date + payload["lables"] = issue.Labels + payload["milestone"] = issue.Milestone.Title != "" + payload["ref"] = issue.Ref + payload["title"] = issue.Title + json_payload, err := json.Marshal(&payload) + var res Issue + if err != nil { + return res, err + } + response, err := http.Post(url, "appliaction/json", bytes.NewBuffer(json_payload)) + if err != nil { + return res, err + } + defer response.Body.Close() + decoder := json.NewDecoder(response.Body) + // NOTE: remove this if I do not want to store everything from the json result in the struct + decoder.DisallowUnknownFields() // remain if every field shall be extracted + if err = decoder.Decode(&res); err != nil { + return res, err + } + return res, nil +} diff --git a/internal/gitea/milestone.go b/internal/gitea/milestone.go index 9f58f74..96c5f89 100644 --- a/internal/gitea/milestone.go +++ b/internal/gitea/milestone.go @@ -72,3 +72,29 @@ func (gitea *Gitea) UpdateMilestone(repo Repository, milestone Milestone) error } return nil } + +func (gitea *Gitea) NewMilestone(repo Repository, milestone Milestone) (Milestone, error) { + url := fmt.Sprintf("%s/repos/%s/milestones", gitea.Url(), repo.Full_name) + payload, err := json.Marshal(&map[string]interface{}{ + "description": milestone.Description, + "due_on": milestone.Due_on, + "state": milestone.State, + "title": milestone.Title, + }) + var res Milestone + if err != nil { + return res, err + } + response, err := http.Post(url, "application/json", bytes.NewBuffer(payload)) + if err != nil { + return res, err + } + defer response.Body.Close() + decoder := json.NewDecoder(response.Body) + // NOTE: remove this if I do not want to stare everything from the json result in the struct + decoder.DisallowUnknownFields() // remain if every field shall be extracted + if err = decoder.Decode(&res); err != nil { + return res, err + } + return res, nil +}