Skip to content

Commit b672d3c

Browse files
committed
Move activity stats calculation logic to model
1 parent 75f9fa4 commit b672d3c

File tree

2 files changed

+52
-49
lines changed

2 files changed

+52
-49
lines changed

models/repo_activity.go

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package models
66

77
import (
8+
"fmt"
89
"time"
910

1011
"github.com/go-xorm/xorm"
@@ -25,6 +26,30 @@ type ActivityStats struct {
2526
PublishedReleaseAuthorCount int64
2627
}
2728

29+
// GetActivityStats return stats for repository at given time range
30+
func GetActivityStats(repoID int64, timeFrom time.Time, releases, issues, prs bool) (*ActivityStats, error) {
31+
stats := &ActivityStats{}
32+
if releases {
33+
if err := stats.FillReleases(repoID, timeFrom); err != nil {
34+
return nil, fmt.Errorf("FillReleases: %v", err)
35+
}
36+
}
37+
if prs {
38+
if err := stats.FillPullRequests(repoID, timeFrom); err != nil {
39+
return nil, fmt.Errorf("FillPullRequests: %v", err)
40+
}
41+
}
42+
if issues {
43+
if err := stats.FillIssues(repoID, timeFrom); err != nil {
44+
return nil, fmt.Errorf("FillIssues: %v", err)
45+
}
46+
}
47+
if err := stats.FillUnresolvedIssues(repoID, timeFrom, issues, prs); err != nil {
48+
return nil, fmt.Errorf("FillUnresolvedIssues: %v", err)
49+
}
50+
return stats, nil
51+
}
52+
2853
// ActivePRCount returns total active pull request count
2954
func (stats *ActivityStats) ActivePRCount() int {
3055
return stats.OpenedPRCount() + stats.MergedPRCount()
@@ -86,12 +111,12 @@ func (stats *ActivityStats) PublishedReleaseCount() int {
86111
}
87112

88113
// FillPullRequests returns pull request information for activity page
89-
func (stats *ActivityStats) FillPullRequests(baseRepoID int64, fromTime time.Time) error {
114+
func (stats *ActivityStats) FillPullRequests(repoID int64, fromTime time.Time) error {
90115
var err error
91116
var count int64
92117

93118
// Merged pull requests
94-
sess := pullRequestsForActivityStatement(baseRepoID, fromTime, true)
119+
sess := pullRequestsForActivityStatement(repoID, fromTime, true)
95120
sess.OrderBy("pull_request.merged_unix DESC")
96121
stats.MergedPRs = make(PullRequestList, 0)
97122
if err = sess.Find(&stats.MergedPRs); err != nil {
@@ -102,14 +127,14 @@ func (stats *ActivityStats) FillPullRequests(baseRepoID int64, fromTime time.Tim
102127
}
103128

104129
// Merged pull request authors
105-
sess = pullRequestsForActivityStatement(baseRepoID, fromTime, true)
130+
sess = pullRequestsForActivityStatement(repoID, fromTime, true)
106131
if _, err = sess.Select("count(distinct issue.poster_id) as `count`").Table("pull_request").Get(&count); err != nil {
107132
return err
108133
}
109134
stats.MergedPRAuthorCount = count
110135

111136
// Opened pull requests
112-
sess = pullRequestsForActivityStatement(baseRepoID, fromTime, false)
137+
sess = pullRequestsForActivityStatement(repoID, fromTime, false)
113138
sess.OrderBy("issue.created_unix ASC")
114139
stats.OpenedPRs = make(PullRequestList, 0)
115140
if err = sess.Find(&stats.OpenedPRs); err != nil {
@@ -120,7 +145,7 @@ func (stats *ActivityStats) FillPullRequests(baseRepoID int64, fromTime time.Tim
120145
}
121146

122147
// Opened pull request authors
123-
sess = pullRequestsForActivityStatement(baseRepoID, fromTime, false)
148+
sess = pullRequestsForActivityStatement(repoID, fromTime, false)
124149
if _, err = sess.Select("count(distinct issue.poster_id) as `count`").Table("pull_request").Get(&count); err != nil {
125150
return err
126151
}
@@ -129,8 +154,8 @@ func (stats *ActivityStats) FillPullRequests(baseRepoID int64, fromTime time.Tim
129154
return nil
130155
}
131156

132-
func pullRequestsForActivityStatement(baseRepoID int64, fromTime time.Time, merged bool) *xorm.Session {
133-
sess := x.Where("pull_request.base_repo_id=?", baseRepoID).
157+
func pullRequestsForActivityStatement(repoID int64, fromTime time.Time, merged bool) *xorm.Session {
158+
sess := x.Where("pull_request.base_repo_id=?", repoID).
134159
Join("INNER", "issue", "pull_request.issue_id = issue.id")
135160

136161
if merged {
@@ -145,35 +170,35 @@ func pullRequestsForActivityStatement(baseRepoID int64, fromTime time.Time, merg
145170
}
146171

147172
// FillIssues returns issue information for activity page
148-
func (stats *ActivityStats) FillIssues(baseRepoID int64, fromTime time.Time) error {
173+
func (stats *ActivityStats) FillIssues(repoID int64, fromTime time.Time) error {
149174
var err error
150175
var count int64
151176

152177
// Closed issues
153-
sess := issuesForActivityStatement(baseRepoID, fromTime, true, false)
178+
sess := issuesForActivityStatement(repoID, fromTime, true, false)
154179
sess.OrderBy("issue.updated_unix DESC")
155180
stats.ClosedIssues = make(IssueList, 0)
156181
if err = sess.Find(&stats.ClosedIssues); err != nil {
157182
return err
158183
}
159184

160185
// Closed issue authors
161-
sess = issuesForActivityStatement(baseRepoID, fromTime, true, false)
186+
sess = issuesForActivityStatement(repoID, fromTime, true, false)
162187
if _, err = sess.Select("count(distinct issue.poster_id) as `count`").Table("issue").Get(&count); err != nil {
163188
return err
164189
}
165190
stats.ClosedIssueAuthorCount = count
166191

167192
// New issues
168-
sess = issuesForActivityStatement(baseRepoID, fromTime, false, false)
193+
sess = issuesForActivityStatement(repoID, fromTime, false, false)
169194
sess.OrderBy("issue.created_unix ASC")
170195
stats.OpenedIssues = make(IssueList, 0)
171196
if err = sess.Find(&stats.OpenedIssues); err != nil {
172197
return err
173198
}
174199

175200
// Opened issue authors
176-
sess = issuesForActivityStatement(baseRepoID, fromTime, false, false)
201+
sess = issuesForActivityStatement(repoID, fromTime, false, false)
177202
if _, err = sess.Select("count(distinct issue.poster_id) as `count`").Table("issue").Get(&count); err != nil {
178203
return err
179204
}
@@ -183,12 +208,12 @@ func (stats *ActivityStats) FillIssues(baseRepoID int64, fromTime time.Time) err
183208
}
184209

185210
// FillUnresolvedIssues returns unresolved issue and pull request information for activity page
186-
func (stats *ActivityStats) FillUnresolvedIssues(baseRepoID int64, fromTime time.Time, issues, prs bool) error {
211+
func (stats *ActivityStats) FillUnresolvedIssues(repoID int64, fromTime time.Time, issues, prs bool) error {
187212
// Check if we need to select anything
188213
if !issues && !prs {
189214
return nil
190215
}
191-
sess := issuesForActivityStatement(baseRepoID, fromTime, false, true)
216+
sess := issuesForActivityStatement(repoID, fromTime, false, true)
192217
if !issues || !prs {
193218
sess.And("issue.is_pull = ?", prs)
194219
}
@@ -197,8 +222,8 @@ func (stats *ActivityStats) FillUnresolvedIssues(baseRepoID int64, fromTime time
197222
return sess.Find(&stats.UnresolvedIssues)
198223
}
199224

200-
func issuesForActivityStatement(baseRepoID int64, fromTime time.Time, closed, unresolved bool) *xorm.Session {
201-
sess := x.Where("issue.repo_id = ?", baseRepoID).
225+
func issuesForActivityStatement(repoID int64, fromTime time.Time, closed, unresolved bool) *xorm.Session {
226+
sess := x.Where("issue.repo_id = ?", repoID).
202227
And("issue.is_closed = ?", closed)
203228

204229
if !unresolved {
@@ -213,20 +238,20 @@ func issuesForActivityStatement(baseRepoID int64, fromTime time.Time, closed, un
213238
}
214239

215240
// FillReleases returns release information for activity page
216-
func (stats *ActivityStats) FillReleases(baseRepoID int64, fromTime time.Time) error {
241+
func (stats *ActivityStats) FillReleases(repoID int64, fromTime time.Time) error {
217242
var err error
218243
var count int64
219244

220245
// Published releases list
221-
sess := releasesForActivityStatement(baseRepoID, fromTime)
246+
sess := releasesForActivityStatement(repoID, fromTime)
222247
sess.OrderBy("release.created_unix DESC")
223248
stats.PublishedReleases = make([]*Release, 0)
224249
if err = sess.Find(&stats.PublishedReleases); err != nil {
225250
return err
226251
}
227252

228253
// Published releases authors
229-
sess = releasesForActivityStatement(baseRepoID, fromTime)
254+
sess = releasesForActivityStatement(repoID, fromTime)
230255
if _, err = sess.Select("count(distinct release.publisher_id) as `count`").Table("release").Get(&count); err != nil {
231256
return err
232257
}
@@ -235,8 +260,8 @@ func (stats *ActivityStats) FillReleases(baseRepoID int64, fromTime time.Time) e
235260
return nil
236261
}
237262

238-
func releasesForActivityStatement(baseRepoID int64, fromTime time.Time) *xorm.Session {
239-
return x.Where("release.repo_id = ?", baseRepoID).
263+
func releasesForActivityStatement(repoID int64, fromTime time.Time) *xorm.Session {
264+
return x.Where("release.repo_id = ?", repoID).
240265
And("release.is_draft = ?", false).
241266
And("release.created_unix >= ?", fromTime.Unix())
242267
}

routers/repo/activity.go

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -43,36 +43,14 @@ func Activity(ctx *context.Context) {
4343
ctx.Data["DateUntil"] = timeUntil.Format("January 2, 2006")
4444
ctx.Data["PeriodText"] = ctx.Tr("repo.activity.period." + ctx.Data["Period"].(string))
4545

46-
stats := &models.ActivityStats{}
47-
48-
pullRequestsEnabled := ctx.Repo.Repository.UnitEnabled(models.UnitTypePullRequests)
49-
issuesEnabled := ctx.Repo.Repository.UnitEnabled(models.UnitTypeIssues)
50-
51-
if ctx.Repo.Repository.UnitEnabled(models.UnitTypeReleases) {
52-
if err := stats.FillReleases(ctx.Repo.Repository.ID, timeFrom); err != nil {
53-
ctx.Handle(500, "FillReleases", err)
54-
return
55-
}
56-
}
57-
if pullRequestsEnabled {
58-
if err := stats.FillPullRequests(ctx.Repo.Repository.ID, timeFrom); err != nil {
59-
ctx.Handle(500, "FillPullRequests", err)
60-
return
61-
}
62-
}
63-
if issuesEnabled {
64-
if err := stats.FillIssues(ctx.Repo.Repository.ID, timeFrom); err != nil {
65-
ctx.Handle(500, "FillIssues", err)
66-
return
67-
}
68-
}
69-
if err := stats.FillUnresolvedIssues(ctx.Repo.Repository.ID, timeFrom,
70-
issuesEnabled, pullRequestsEnabled); err != nil {
71-
ctx.Handle(500, "FillUnresolvedIssues", err)
46+
var err error
47+
if ctx.Data["Activity"], err = models.GetActivityStats(ctx.Repo.Repository.ID, timeFrom,
48+
ctx.Repo.Repository.UnitEnabled(models.UnitTypeReleases),
49+
ctx.Repo.Repository.UnitEnabled(models.UnitTypeIssues),
50+
ctx.Repo.Repository.UnitEnabled(models.UnitTypePullRequests)); err != nil {
51+
ctx.Handle(500, "GetActivityStats", err)
7252
return
7353
}
7454

75-
ctx.Data["Activity"] = stats
76-
7755
ctx.HTML(200, tplActivity)
7856
}

0 commit comments

Comments
 (0)