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

changeset 238
1d48b38ca349
parent 236
819c5178b6fe
child 239
9365c7fb0240
equal deleted inserted replaced
237:84e42725bf8e 238:1d48b38ca349
71 71
72 val prev = fullContent(next) 72 val prev = fullContent(next)
73 val diff = fullContent(cur) 73 val diff = fullContent(cur)
74 74
75 val result = generator.generateDiffRows( 75 val result = generator.generateDiffRows(
76 listOf(prev.subject, prev.component, prev.status, 76 listOf(
77 prev.category, prev.assignee, prev.eta, prev.affected, prev.resolved), 77 prev.subject, prev.component, prev.status,
78 listOf(diff.subject, diff.component, diff.status, 78 prev.category, prev.assignee, prev.eta, prev.affected, prev.resolved
79 diff.category, diff.assignee, diff.eta, diff.affected, diff.resolved) 79 ),
80 listOf(
81 diff.subject, diff.component, diff.status,
82 diff.category, diff.assignee, diff.eta, diff.affected, diff.resolved
83 )
80 ) 84 )
81 85
82 diff.subject = result[0].oldLine 86 diff.subject = result[0].oldLine
83 diff.component = result[1].oldLine 87 diff.component = result[1].oldLine
84 diff.status = result[2].oldLine 88 diff.status = result[2].oldLine
98 102
99 /** 103 /**
100 * Generates the feed entries. 104 * Generates the feed entries.
101 * Assumes that [historyEntry] is already sorted by timestamp (descending). 105 * Assumes that [historyEntry] is already sorted by timestamp (descending).
102 */ 106 */
103 private fun generateFeedEntries(historyEntry: List<IssueHistoryEntry>) = 107 private fun generateFeedEntries(historyEntry: List<IssueHistoryEntry>): List<IssueFeedEntry> =
104 if (historyEntry.isEmpty()) emptyList() 108 if (historyEntry.isEmpty()) {
105 else historyEntry.zipWithNext().map { (cur, next) -> 109 emptyList()
106 IssueFeedEntry( 110 } else {
107 cur.time, cur.type, diffContent(cur.data, next.data) 111 historyEntry.groupBy { it.data.id }.mapValues { (_, history) ->
108 ) 112 history.zipWithNext().map { (cur, next) ->
109 }.plus( 113 IssueFeedEntry(
110 historyEntry.last().let { IssueFeedEntry(it.time, it.type, fullContent(it.data)) } 114 cur.time, cur.type, diffContent(cur.data, next.data)
111 ) 115 )
116 }.plus(
117 history.last().let { IssueFeedEntry(it.time, it.type, fullContent(it.data)) }
118 )
119 }.flatMap { it.value }.sortedByDescending { it.time }
120 }
112 121
113 private fun issues(http: HttpRequest, dao: DataAccessObject) { 122 private fun issues(http: HttpRequest, dao: DataAccessObject) {
114 val project = http.pathParams["project"]?.let { dao.findProjectByNode(it) } 123 val project = http.pathParams["project"]?.let { dao.findProjectByNode(it) }
115 if (project == null) { 124 if (project == null) {
116 http.response.sendError(404) 125 http.response.sendError(404)

mercurial