src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.kt

changeset 238
1d48b38ca349
parent 236
819c5178b6fe
child 239
9365c7fb0240
     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) }

mercurial