Skip to content

Commit

Permalink
[Refactor] getIssueStatsChunk to move inner function into own one (#2…
Browse files Browse the repository at this point in the history
…6671)

move inner **countSession** of **getIssueStatsChunk** into it's own
function for reuse

---
*Sponsored by Kithara Software GmbH*
  • Loading branch information
6543 authored Aug 23, 2023
1 parent 8f2e287 commit 3a67997
Showing 1 changed file with 49 additions and 48 deletions.
97 changes: 49 additions & 48 deletions models/issues/issue_stats.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,68 +116,69 @@ func GetIssueStats(opts *IssuesOptions) (*IssueStats, error) {
func getIssueStatsChunk(opts *IssuesOptions, issueIDs []int64) (*IssueStats, error) {
stats := &IssueStats{}

countSession := func(opts *IssuesOptions, issueIDs []int64) *xorm.Session {
sess := db.GetEngine(db.DefaultContext).
Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
if len(opts.RepoIDs) > 1 {
sess.In("issue.repo_id", opts.RepoIDs)
} else if len(opts.RepoIDs) == 1 {
sess.And("issue.repo_id = ?", opts.RepoIDs[0])
}
sess := db.GetEngine(db.DefaultContext).
Join("INNER", "repository", "`issue`.repo_id = `repository`.id")

if len(issueIDs) > 0 {
sess.In("issue.id", issueIDs)
}
var err error
stats.OpenCount, err = applyIssuesOptions(sess, opts, issueIDs).
And("issue.is_closed = ?", false).
Count(new(Issue))
if err != nil {
return stats, err
}
stats.ClosedCount, err = applyIssuesOptions(sess, opts, issueIDs).
And("issue.is_closed = ?", true).
Count(new(Issue))
return stats, err
}

applyLabelsCondition(sess, opts)
func applyIssuesOptions(sess *xorm.Session, opts *IssuesOptions, issueIDs []int64) *xorm.Session {
if len(opts.RepoIDs) > 1 {
sess.In("issue.repo_id", opts.RepoIDs)
} else if len(opts.RepoIDs) == 1 {
sess.And("issue.repo_id = ?", opts.RepoIDs[0])
}

applyMilestoneCondition(sess, opts)
if len(issueIDs) > 0 {
sess.In("issue.id", issueIDs)
}

applyProjectCondition(sess, opts)
applyLabelsCondition(sess, opts)

if opts.AssigneeID > 0 {
applyAssigneeCondition(sess, opts.AssigneeID)
} else if opts.AssigneeID == db.NoConditionID {
sess.Where("issue.id NOT IN (SELECT issue_id FROM issue_assignees)")
}
applyMilestoneCondition(sess, opts)

if opts.PosterID > 0 {
applyPosterCondition(sess, opts.PosterID)
}
applyProjectCondition(sess, opts)

if opts.MentionedID > 0 {
applyMentionedCondition(sess, opts.MentionedID)
}
if opts.AssigneeID > 0 {
applyAssigneeCondition(sess, opts.AssigneeID)
} else if opts.AssigneeID == db.NoConditionID {
sess.Where("issue.id NOT IN (SELECT issue_id FROM issue_assignees)")
}

if opts.ReviewRequestedID > 0 {
applyReviewRequestedCondition(sess, opts.ReviewRequestedID)
}
if opts.PosterID > 0 {
applyPosterCondition(sess, opts.PosterID)
}

if opts.ReviewedID > 0 {
applyReviewedCondition(sess, opts.ReviewedID)
}
if opts.MentionedID > 0 {
applyMentionedCondition(sess, opts.MentionedID)
}

switch opts.IsPull {
case util.OptionalBoolTrue:
sess.And("issue.is_pull=?", true)
case util.OptionalBoolFalse:
sess.And("issue.is_pull=?", false)
}
if opts.ReviewRequestedID > 0 {
applyReviewRequestedCondition(sess, opts.ReviewRequestedID)
}

return sess
if opts.ReviewedID > 0 {
applyReviewedCondition(sess, opts.ReviewedID)
}

var err error
stats.OpenCount, err = countSession(opts, issueIDs).
And("issue.is_closed = ?", false).
Count(new(Issue))
if err != nil {
return stats, err
switch opts.IsPull {
case util.OptionalBoolTrue:
sess.And("issue.is_pull=?", true)
case util.OptionalBoolFalse:
sess.And("issue.is_pull=?", false)
}
stats.ClosedCount, err = countSession(opts, issueIDs).
And("issue.is_closed = ?", true).
Count(new(Issue))
return stats, err

return sess
}

// GetUserIssueStats returns issue statistic information for dashboard by given conditions.
Expand Down

0 comments on commit 3a67997

Please sign in to comment.