1
1
const _ = require ( "lodash" )
2
2
3
- const timeUtils = require ( "../utils/time" )
4
-
5
3
const BaseCommand = require ( "./BaseCommand" )
4
+ const UnapprovedRequestDescription = require ( "./unapproved/UnapprovedRequestDescription" )
6
5
7
6
class Unapproved extends BaseCommand {
8
7
perform = ( ) => {
@@ -23,7 +22,7 @@ class Unapproved extends BaseCommand {
23
22
__buildMessage = requests => {
24
23
if ( requests . length ) {
25
24
const list = requests . map ( this . __buildRequestDescription ) . join ( "\n" )
26
- const head = "#### Hey, there is a couple of requests waiting for your review"
25
+ const head = "#### Hey, there are a couple of requests waiting for your review"
27
26
28
27
return `${ head } \n\n${ list } `
29
28
} else {
@@ -35,40 +34,9 @@ class Unapproved extends BaseCommand {
35
34
}
36
35
37
36
__buildRequestDescription = request => {
38
- const updated = new Date ( request . updated_at )
39
- const reaction = this . __getEmoji ( updated )
40
-
41
- const link = `[${ request . title } ](${ request . web_url } )`
42
- const author = `@${ request . author . username } `
43
- const project = `[${ request . project . name } ](${ request . project . web_url } )`
44
- const unresolvedAuthors = this . __unresolvedAuthorsString ( request )
45
- const approvedBy = this . __approvedByString ( request )
46
-
47
- let message = [ `${ reaction } **${ link } ** (${ project } ) by **${ author } **` ]
48
-
49
- if ( unresolvedAuthors . length > 0 ) {
50
- message . push ( `unresolved threads by: ${ unresolvedAuthors } ` )
51
- }
52
- if ( approvedBy . length > 0 ) {
53
- message . push ( `already approved by: ${ approvedBy } ` )
54
- }
55
-
56
- return message . join ( "\n" )
57
- }
58
-
59
- __getEmoji = lastUpdate => {
60
- const emoji = _ . get ( this . config , "unapproved.emoji" , { } )
61
- const interval = new Date ( ) . getTime ( ) - lastUpdate . getTime ( )
62
-
63
- const findEmoji = _ . flow (
64
- _ . partialRight ( _ . toPairs ) ,
65
- _ . partialRight ( _ . map , ( [ key , value ] ) => [ timeUtils . parseInterval ( key ) , value ] ) ,
66
- _ . partialRight ( _ . sortBy , ( [ time ] ) => - time ) ,
67
- _ . partialRight ( _ . find , ( [ time ] ) => time < interval ) ,
68
- _ . partialRight ( _ . last ) ,
69
- )
37
+ const descriptionBuilder = new UnapprovedRequestDescription ( request , this . config )
70
38
71
- return findEmoji ( emoji ) || emoji . default || ""
39
+ return descriptionBuilder . build ( )
72
40
}
73
41
74
42
__getUnapprovedRequests = projectId => this . __getExtendedRequests ( projectId )
@@ -100,44 +68,6 @@ class Unapproved extends BaseCommand {
100
68
__appendDiscussions = ( project , request ) => this . gitlab
101
69
. discussions ( project . id , request . iid )
102
70
. then ( discussions => ( { ...request , discussions } ) )
103
-
104
- __unresolvedAuthorsString = request => {
105
- return this . __unresolvedAuthorsFor ( request ) . map ( author => {
106
- return `@${ author . username } `
107
- } ) . join ( ", " )
108
- }
109
-
110
- __approvedByString = request => {
111
- return request . approved_by . map ( approve => {
112
- const { user } = approve
113
-
114
- return `@${ user . username } `
115
- } ) . join ( ", " )
116
- }
117
-
118
- __unresolvedAuthorsFor = request => {
119
- const { discussions } = request
120
-
121
- const userNames = _ . flow (
122
- _ . partialRight (
123
- _ . filter ,
124
- discussion => discussion . notes . some (
125
- note => note . resolvable && ! note . resolved
126
- )
127
- ) ,
128
- _ . partialRight (
129
- _ . map ,
130
- discussion => discussion . notes . map ( note => note . author )
131
- ) ,
132
- _ . partialRight ( _ . flatten ) ,
133
- _ . partialRight (
134
- _ . uniqBy ,
135
- author => author . username
136
- ) ,
137
- )
138
-
139
- return userNames ( discussions )
140
- }
141
71
}
142
72
143
73
module . exports = Unapproved
0 commit comments