diff --git a/models/issue_stopwatch.go b/models/issue_stopwatch.go index f80ce4139..789f8ebdf 100644 --- a/models/issue_stopwatch.go +++ b/models/issue_stopwatch.go @@ -216,12 +216,39 @@ func (sw *Stopwatch) APIFormat() (api.StopWatch, error) { // APIFormat convert Stopwatches type to api.StopWatches type func (sws Stopwatches) APIFormat() (api.StopWatches, error) { result := api.StopWatches(make([]api.StopWatch, 0, len(sws))) + + issueCache := make(map[int64]*Issue) + repoCache := make(map[int64]*Repository) + var ( + issue *Issue + repo *Repository + ok bool + err error + ) + for _, sw := range sws { - apiSW, err := sw.APIFormat() - if err != nil { - return nil, err + issue, ok = issueCache[sw.IssueID] + if !ok { + issue, err = GetIssueByID(sw.IssueID) + if err != nil { + return nil, err + } } - result = append(result, apiSW) + repo, ok = repoCache[issue.RepoID] + if !ok { + repo, err = GetRepositoryByID(issue.RepoID) + if err != nil { + return nil, err + } + } + + result = append(result, api.StopWatch{ + Created: sw.CreatedUnix.AsTime(), + IssueIndex: issue.Index, + IssueTitle: issue.Title, + RepoOwnerName: repo.OwnerName, + RepoName: repo.Name, + }) } return result, nil }