1.1 --- a/src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.kt Sun Oct 10 14:56:03 2021 +0200 1.2 +++ b/src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.kt Sun Oct 10 15:12:12 2021 +0200 1.3 @@ -73,10 +73,14 @@ 1.4 val diff = fullContent(cur) 1.5 1.6 val result = generator.generateDiffRows( 1.7 - listOf(prev.subject, prev.component, prev.status, 1.8 - prev.category, prev.assignee, prev.eta, prev.affected, prev.resolved), 1.9 - listOf(diff.subject, diff.component, diff.status, 1.10 - diff.category, diff.assignee, diff.eta, diff.affected, diff.resolved) 1.11 + listOf( 1.12 + prev.subject, prev.component, prev.status, 1.13 + prev.category, prev.assignee, prev.eta, prev.affected, prev.resolved 1.14 + ), 1.15 + listOf( 1.16 + diff.subject, diff.component, diff.status, 1.17 + diff.category, diff.assignee, diff.eta, diff.affected, diff.resolved 1.18 + ) 1.19 ) 1.20 1.21 diff.subject = result[0].oldLine 1.22 @@ -100,15 +104,20 @@ 1.23 * Generates the feed entries. 1.24 * Assumes that [historyEntry] is already sorted by timestamp (descending). 1.25 */ 1.26 - private fun generateFeedEntries(historyEntry: List<IssueHistoryEntry>) = 1.27 - if (historyEntry.isEmpty()) emptyList() 1.28 - else historyEntry.zipWithNext().map { (cur, next) -> 1.29 - IssueFeedEntry( 1.30 - cur.time, cur.type, diffContent(cur.data, next.data) 1.31 - ) 1.32 - }.plus( 1.33 - historyEntry.last().let { IssueFeedEntry(it.time, it.type, fullContent(it.data)) } 1.34 - ) 1.35 + private fun generateFeedEntries(historyEntry: List<IssueHistoryEntry>): List<IssueFeedEntry> = 1.36 + if (historyEntry.isEmpty()) { 1.37 + emptyList() 1.38 + } else { 1.39 + historyEntry.groupBy { it.data.id }.mapValues { (_, history) -> 1.40 + history.zipWithNext().map { (cur, next) -> 1.41 + IssueFeedEntry( 1.42 + cur.time, cur.type, diffContent(cur.data, next.data) 1.43 + ) 1.44 + }.plus( 1.45 + history.last().let { IssueFeedEntry(it.time, it.type, fullContent(it.data)) } 1.46 + ) 1.47 + }.flatMap { it.value }.sortedByDescending { it.time } 1.48 + } 1.49 1.50 private fun issues(http: HttpRequest, dao: DataAccessObject) { 1.51 val project = http.pathParams["project"]?.let { dao.findProjectByNode(it) }