[Refactor] getIssueStatsChunk to move inner function into own one (#26671)

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

---
*Sponsored by Kithara Software GmbH*
pull/26654/head^2
6543 1 year ago committed by GitHub
parent 8f2e2878e5
commit 3a67997f98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 97
      models/issues/issue_stats.go

@ -116,68 +116,69 @@ func GetIssueStats(opts *IssuesOptions) (*IssueStats, error) {
func getIssueStatsChunk(opts *IssuesOptions, issueIDs []int64) (*IssueStats, error) { func getIssueStatsChunk(opts *IssuesOptions, issueIDs []int64) (*IssueStats, error) {
stats := &IssueStats{} stats := &IssueStats{}
countSession := func(opts *IssuesOptions, issueIDs []int64) *xorm.Session { sess := db.GetEngine(db.DefaultContext).
sess := db.GetEngine(db.DefaultContext). Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
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])
}
if len(issueIDs) > 0 { var err error
sess.In("issue.id", issueIDs) 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 { applyMilestoneCondition(sess, opts)
applyAssigneeCondition(sess, opts.AssigneeID)
} else if opts.AssigneeID == db.NoConditionID {
sess.Where("issue.id NOT IN (SELECT issue_id FROM issue_assignees)")
}
if opts.PosterID > 0 { applyProjectCondition(sess, opts)
applyPosterCondition(sess, opts.PosterID)
}
if opts.MentionedID > 0 { if opts.AssigneeID > 0 {
applyMentionedCondition(sess, opts.MentionedID) 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 { if opts.PosterID > 0 {
applyReviewRequestedCondition(sess, opts.ReviewRequestedID) applyPosterCondition(sess, opts.PosterID)
} }
if opts.ReviewedID > 0 { if opts.MentionedID > 0 {
applyReviewedCondition(sess, opts.ReviewedID) applyMentionedCondition(sess, opts.MentionedID)
} }
switch opts.IsPull { if opts.ReviewRequestedID > 0 {
case util.OptionalBoolTrue: applyReviewRequestedCondition(sess, opts.ReviewRequestedID)
sess.And("issue.is_pull=?", true) }
case util.OptionalBoolFalse:
sess.And("issue.is_pull=?", false)
}
return sess if opts.ReviewedID > 0 {
applyReviewedCondition(sess, opts.ReviewedID)
} }
var err error switch opts.IsPull {
stats.OpenCount, err = countSession(opts, issueIDs). case util.OptionalBoolTrue:
And("issue.is_closed = ?", false). sess.And("issue.is_pull=?", true)
Count(new(Issue)) case util.OptionalBoolFalse:
if err != nil { sess.And("issue.is_pull=?", false)
return stats, err
} }
stats.ClosedCount, err = countSession(opts, issueIDs).
And("issue.is_closed = ?", true). return sess
Count(new(Issue))
return stats, err
} }
// GetUserIssueStats returns issue statistic information for dashboard by given conditions. // GetUserIssueStats returns issue statistic information for dashboard by given conditions.

Loading…
Cancel
Save