implemet Cache for Stopwatches.APIFormat() (#12730)

Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
6543 2020-09-06 03:20:27 +02:00 committed by GitHub
parent f10d3ea803
commit 1c35353c53
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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
}