2
2
* Service for submission processor.
3
3
*/
4
4
5
+ const _ = require ( 'lodash' )
5
6
const Joi = require ( 'joi' )
6
7
const logger = require ( '../common/logger' )
7
8
const helper = require ( '../common/helper' )
8
9
const config = require ( 'config' )
9
10
10
11
const client = helper . getESClient ( )
11
12
13
+ /**
14
+ * Get elastic search data.
15
+ * @param {String } id the Elastic search data id
16
+ * @returns {Object } Data from Elastic search
17
+ */
18
+ function * getESData ( id ) {
19
+ return yield client . getSource ( {
20
+ index : config . get ( 'esConfig.ES_INDEX' ) ,
21
+ type : config . get ( 'esConfig.ES_TYPE' ) ,
22
+ id
23
+ } )
24
+ }
25
+
12
26
/**
13
27
* Create message in Elasticsearch.
14
28
* @param {Object } message the message
@@ -20,6 +34,35 @@ function * create (message) {
20
34
id : message . payload . id ,
21
35
body : message . payload
22
36
} )
37
+
38
+ // Add review / reviewSummation to submission
39
+ if ( message . payload . resource === 'review' ) {
40
+ const submission = yield getESData ( message . payload . submissionId )
41
+ let reviewArr = [ ]
42
+ reviewArr . push ( _ . omit ( message . payload , [ 'resource' ] ) )
43
+ if ( submission . review ) {
44
+ reviewArr = reviewArr . concat ( submission . review )
45
+ }
46
+ yield client . update ( {
47
+ index : config . get ( 'esConfig.ES_INDEX' ) ,
48
+ type : config . get ( 'esConfig.ES_TYPE' ) ,
49
+ id : message . payload . submissionId ,
50
+ body : { doc : { review : reviewArr } }
51
+ } )
52
+ } else if ( message . payload . resource === 'reviewSummation' ) {
53
+ const submission = yield getESData ( message . payload . submissionId )
54
+ let reviewSummationArr = [ ]
55
+ reviewSummationArr . push ( _ . omit ( message . payload , [ 'resource' ] ) )
56
+ if ( submission . reviewSummationArr ) {
57
+ reviewSummationArr = reviewSummationArr . concat ( submission . review )
58
+ }
59
+ yield client . update ( {
60
+ index : config . get ( 'esConfig.ES_INDEX' ) ,
61
+ type : config . get ( 'esConfig.ES_TYPE' ) ,
62
+ id : message . payload . submissionId ,
63
+ body : { doc : { reviewSummation : reviewSummationArr } }
64
+ } )
65
+ }
23
66
}
24
67
25
68
create . schema = {
@@ -46,6 +89,34 @@ function * update (message) {
46
89
id : message . payload . id ,
47
90
body : { doc : message . payload }
48
91
} )
92
+
93
+ if ( message . payload . resource === 'review' ) {
94
+ const review = yield getESData ( message . payload . id )
95
+ const submission = yield getESData ( review . submissionId )
96
+ const reviewToBeUpdated = _ . filter ( submission . review , { id : message . payload . id } ) [ 0 ]
97
+ _ . extend ( reviewToBeUpdated , _ . omit ( message . payload , [ 'resource' ] ) )
98
+ _ . remove ( submission . review , { id : message . payload . id } )
99
+ submission . review . push ( reviewToBeUpdated )
100
+ yield client . update ( {
101
+ index : config . get ( 'esConfig.ES_INDEX' ) ,
102
+ type : config . get ( 'esConfig.ES_TYPE' ) ,
103
+ id : submission . id ,
104
+ body : { doc : { review : submission . review } }
105
+ } )
106
+ } else if ( message . payload . resource === 'reviewSummation' ) {
107
+ const reviewSummation = yield getESData ( message . payload . id )
108
+ const submission = yield getESData ( reviewSummation . submissionId )
109
+ const reviewSummationToBeUpdated = _ . filter ( submission . reviewSummation , { id : message . payload . id } ) [ 0 ]
110
+ _ . extend ( reviewSummationToBeUpdated , _ . omit ( message . payload , [ 'resource' ] ) )
111
+ _ . remove ( submission . reviewSummation , { id : message . payload . id } )
112
+ submission . reviewSummation . push ( reviewSummationToBeUpdated )
113
+ yield client . update ( {
114
+ index : config . get ( 'esConfig.ES_INDEX' ) ,
115
+ type : config . get ( 'esConfig.ES_TYPE' ) ,
116
+ id : submission . id ,
117
+ body : { doc : { reviewSummation : submission . reviewSummation } }
118
+ } )
119
+ }
49
120
}
50
121
51
122
update . schema = create . schema
@@ -55,6 +126,29 @@ update.schema = create.schema
55
126
* @param {Object } message the message
56
127
*/
57
128
function * remove ( message ) {
129
+ // Remove review / reviewSummation from submission data
130
+ if ( message . payload . resource === 'review' ) {
131
+ const review = yield getESData ( message . payload . id )
132
+ const submission = yield getESData ( review . submissionId )
133
+ _ . remove ( submission . review , { id : message . payload . id } )
134
+ yield client . update ( {
135
+ index : config . get ( 'esConfig.ES_INDEX' ) ,
136
+ type : config . get ( 'esConfig.ES_TYPE' ) ,
137
+ id : submission . id ,
138
+ body : { doc : { review : submission . review } }
139
+ } )
140
+ } else if ( message . payload . resource === 'reviewSummation' ) {
141
+ const reviewSummation = yield getESData ( message . payload . id )
142
+ const submission = yield getESData ( reviewSummation . submissionId )
143
+ _ . remove ( submission . reviewSummation , { id : message . payload . id } )
144
+ yield client . update ( {
145
+ index : config . get ( 'esConfig.ES_INDEX' ) ,
146
+ type : config . get ( 'esConfig.ES_TYPE' ) ,
147
+ id : submission . id ,
148
+ body : { doc : { reviewSummation : submission . reviewSummation } }
149
+ } )
150
+ }
151
+
58
152
yield client . delete ( {
59
153
index : config . get ( 'esConfig.ES_INDEX' ) ,
60
154
type : config . get ( 'esConfig.ES_TYPE' ) ,
0 commit comments