diff options
author | 6543 <6543@obermui.de> | 2021-09-10 18:03:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-10 18:03:16 +0200 |
commit | 51578d64188a7077848cb60d3ead8e818637ab59 (patch) | |
tree | 7dc50e490b6b0ad759fb859830ef06ef7ba4c713 /modules/convert/issue.go | |
parent | 9a938dc2980667bf4cbdb3af45c32f561af4bec4 (diff) | |
download | gitea-51578d64188a7077848cb60d3ead8e818637ab59.tar.gz gitea-51578d64188a7077848cb60d3ead8e818637ab59.zip |
Calculate label URL on API (#16186)
close #8028
Diffstat (limited to 'modules/convert/issue.go')
-rw-r--r-- | modules/convert/issue.go | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/modules/convert/issue.go b/modules/convert/issue.go index da09aeaca4..3974d460e0 100644 --- a/modules/convert/issue.go +++ b/modules/convert/issue.go @@ -5,9 +5,12 @@ package convert import ( + "fmt" "strings" "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" ) @@ -25,6 +28,9 @@ func ToAPIIssue(issue *models.Issue) *api.Issue { if err := issue.LoadRepo(); err != nil { return &api.Issue{} } + if err := issue.Repo.GetOwner(); err != nil { + return &api.Issue{} + } apiIssue := &api.Issue{ ID: issue.ID, @@ -35,7 +41,7 @@ func ToAPIIssue(issue *models.Issue) *api.Issue { Title: issue.Title, Body: issue.Content, Ref: issue.Ref, - Labels: ToLabelList(issue.Labels), + Labels: ToLabelList(issue.Labels, issue.Repo, issue.Repo.Owner), State: issue.State(), IsLocked: issue.IsLocked, Comments: issue.NumComments, @@ -168,20 +174,37 @@ func ToTrackedTimeList(tl models.TrackedTimeList) api.TrackedTimeList { } // ToLabel converts Label to API format -func ToLabel(label *models.Label) *api.Label { - return &api.Label{ +func ToLabel(label *models.Label, repo *models.Repository, org *models.User) *api.Label { + result := &api.Label{ ID: label.ID, Name: label.Name, Color: strings.TrimLeft(label.Color, "#"), Description: label.Description, } + + // calculate URL + if label.BelongsToRepo() && repo != nil { + if repo != nil { + result.URL = fmt.Sprintf("%s/labels/%d", repo.APIURL(), label.ID) + } else { + log.Error("ToLabel did not get repo to calculate url for label with id '%d'", label.ID) + } + } else { // BelongsToOrg + if org != nil { + result.URL = fmt.Sprintf("%sapi/v1/orgs/%s/labels/%d", setting.AppURL, org.Name, label.ID) + } else { + log.Error("ToLabel did not get org to calculate url for label with id '%d'", label.ID) + } + } + + return result } // ToLabelList converts list of Label to API format -func ToLabelList(labels []*models.Label) []*api.Label { +func ToLabelList(labels []*models.Label, repo *models.Repository, org *models.User) []*api.Label { result := make([]*api.Label, len(labels)) for i := range labels { - result[i] = ToLabel(labels[i]) + result[i] = ToLabel(labels[i], repo, org) } return result } |