package gitea import ( "bytes" "encoding/json" "fmt" "net/http" "time" ) type Milestone struct { Id uint Title string Description string State string Open_issues uint Closed_issues uint Created_at time.Time Updated_at time.Time Due_on time.Time Closed_at time.Time } func (gitea *Gitea) GetMilestones(repo Repository) ([]Milestone, error) { url := fmt.Sprintf("%s/repos/%s/milestones?state=all", gitea.Url(), repo.Full_name) response, err := http.Get(url) if err != nil { return nil, err } defer response.Body.Close() var data []Milestone 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(&data); err != nil { return nil, err } return data, nil } func (gitea *Gitea) GetMilestone(repo Repository, id uint) (Milestone, error) { url := fmt.Sprintf("%s/repos/%s/milestones/%d", gitea.Url(), repo.Full_name, id) response, err := http.Get(url) var milestone Milestone if err != nil { return milestone, 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(&milestone); err != nil { return milestone, err } 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 }