mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-02 11:36:05 +01:00
Use ISSUE_OUTLINE_VIEW to retrieve comment count.
This commit is contained in:
@@ -241,39 +241,44 @@ trait IssuesService {
|
|||||||
val keywords = splitWords(query.toLowerCase)
|
val keywords = splitWords(query.toLowerCase)
|
||||||
|
|
||||||
// Search Issue
|
// Search Issue
|
||||||
val issues = Query(Issues).filter { t =>
|
val issues = Issues
|
||||||
keywords.map { keyword =>
|
.innerJoin(IssueOutline).on { case (t1, t2) =>
|
||||||
(t.title.toLowerCase like (s"%${likeEncode(keyword)}%", '^')) ||
|
t1.byIssue(t2.userName, t2.repositoryName, t2.issueId)
|
||||||
(t.content.toLowerCase like (s"%${likeEncode(keyword)}%", '^'))
|
}
|
||||||
} .reduceLeft(_ && _)
|
.filter { case (t1, t2) =>
|
||||||
}.map { t => (t, 0, t.content.?) }
|
keywords.map { keyword =>
|
||||||
|
(t1.title.toLowerCase like (s"%${likeEncode(keyword)}%", '^')) ||
|
||||||
|
(t1.content.toLowerCase like (s"%${likeEncode(keyword)}%", '^'))
|
||||||
|
} .reduceLeft(_ && _)
|
||||||
|
}
|
||||||
|
.map { case (t1, t2) =>
|
||||||
|
(t1, 0, t1.content.?, t2.commentCount)
|
||||||
|
}
|
||||||
|
|
||||||
// Search IssueComment
|
// Search IssueComment
|
||||||
val comments = Query(IssueComments).innerJoin(Issues).on { case (t1, t2) =>
|
val comments = IssueComments
|
||||||
t1.byIssue(t2.userName, t2.repositoryName, t2.issueId)
|
.innerJoin(Issues).on { case (t1, t2) =>
|
||||||
}.filter { case (t1, t2) =>
|
t1.byIssue(t2.userName, t2.repositoryName, t2.issueId)
|
||||||
keywords.map { query =>
|
}
|
||||||
t1.content.toLowerCase like (s"%${likeEncode(query)}%", '^')
|
.innerJoin(IssueOutline).on { case ((t1, t2), t3) =>
|
||||||
}.reduceLeft(_ && _)
|
t2.byIssue(t3.userName, t3.repositoryName, t3.issueId)
|
||||||
}.map { case (t1, t2) => (t2, t1.commentId, t1.content.?) }
|
}
|
||||||
|
.filter { case ((t1, t2), t3) =>
|
||||||
|
keywords.map { query =>
|
||||||
|
t1.content.toLowerCase like (s"%${likeEncode(query)}%", '^')
|
||||||
|
}.reduceLeft(_ && _)
|
||||||
|
}
|
||||||
|
.map { case ((t1, t2), t3) =>
|
||||||
|
(t2, t1.commentId, t1.content.?, t3.commentCount)
|
||||||
|
}
|
||||||
|
|
||||||
def getCommentCount(issue: Issue): Int = {
|
issues.union(comments).sortBy { case (issue, commentId, _, _) =>
|
||||||
Query(IssueComments)
|
|
||||||
.filter { t =>
|
|
||||||
t.byIssue(issue.userName, issue.repositoryName, issue.issueId) &&
|
|
||||||
(t.action inSetBind Seq("comment", "close_comment", "reopen_comment"))
|
|
||||||
}
|
|
||||||
.map(_.issueId)
|
|
||||||
.list.length
|
|
||||||
}
|
|
||||||
|
|
||||||
issues.union(comments).sortBy { case (issue, commentId, _) =>
|
|
||||||
issue.issueId ~ commentId
|
issue.issueId ~ commentId
|
||||||
}.list.splitWith { case ((issue1, _, _), (issue2, _, _)) =>
|
}.list.splitWith { case ((issue1, _, _, _), (issue2, _, _, _)) =>
|
||||||
issue1.issueId == issue2.issueId
|
issue1.issueId == issue2.issueId
|
||||||
}.map { result =>
|
}.map { _.head match {
|
||||||
val (issue, _, content) = result.head
|
case (issue, _, content, commentCount) => (issue, commentCount, content.getOrElse(""))
|
||||||
(issue, getCommentCount(issue) , content.getOrElse(""))
|
}
|
||||||
}.toList
|
}.toList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user