Skip to content

Commit 6681046

Browse files
authored
Merge pull request #3 from sharathkumaranbu/Issue_35
Combine review and reviewSummation with Submission
2 parents 134149f + e2246ad commit 6681046

File tree

3 files changed

+131
-1
lines changed

3 files changed

+131
-1
lines changed

README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,3 +190,39 @@ info: The data is not found.
190190
`{ "topic": "submission.notification.create", "originator": "submission-api", "timestamp": "2018-02-16T00:00:00", "mime-type": "application/json", "payload": { "resource": "reviewType", "id": "3333", "name": "some review type", "isActive": true } }`
191191
- reviewSummation:
192192
`{ "topic": "submission.notification.create", "originator": "submission-api", "timestamp": "2018-02-16T00:00:00", "mime-type": "application/json", "payload": { "resource": "reviewSummation", "id": "4444", "submissionId": "asdfasdf", "aggregateScore": 98, "scoreCardId": "abbccaaa", "isPassing": true, "created": "2018-01-02T00:00:00", "updated": "2018-02-03T00:00:00", "createdBy": "admin", "updatedBy": "user" } }`
193+
194+
195+
### Verification for combining review and reviewSummation with Submission
196+
197+
- From the `submissions-api` repository, Run the command `npm run create-index` to create index with specified data types
198+
199+
- Run the command `npm run init-es` to load test data into ES
200+
201+
- Now from the Kafka console producer, Write the below messages into topic `submission.notification.create`
202+
203+
```
204+
{ "topic":"submission.notification.create", "originator":"submission-api", "timestamp":"2018-08-06T15:46:05.575Z", "mime-type":"application/json", "payload":{ "resource":"review", "id": "d34d4180-65aa-42ec-a945-5fd21dec0502", "score": 92.0, "typeId": "c56a4180-65aa-42ec-a945-5fd21dec0501", "reviewerId": "c23a4180-65aa-42ec-a945-5fd21dec0503", "scoreCardId": "b25a4180-65aa-42ec-a945-5fd21dec0503", "submissionId": "a12a4180-65aa-42ec-a945-5fd21dec0501", "created": "2018-05-20T07:00:30.123Z", "updated": "2018-06-01T07:36:28.178Z", "createdBy": "admin", "updatedBy": "admin" } }
205+
206+
207+
{ "topic":"submission.notification.create", "originator":"submission-api", "timestamp":"2018-08-06T15:46:05.575Z", "mime-type":"application/json", "payload":{ "resource":"review", "id": "d34d4180-65aa-42ec-a945-5fd21dec0503", "score": 95.0, "typeId": "c56a4180-65aa-42ec-a945-5fd21dec0501", "reviewerId": "c23a4180-65aa-42ec-a945-5fd21dec0504", "scoreCardId": "b25a4180-65aa-42ec-a945-5fd21dec0503", "submissionId": "a12a4180-65aa-42ec-a945-5fd21dec0501", "created": "2018-05-20T07:00:30.123Z", "updated": "2018-06-01T07:36:28.178Z", "createdBy": "admin", "updatedBy": "admin" } }
208+
```
209+
210+
- This will create two reviews as well as attach the reviews with a submission
211+
212+
- To look at the updated submission in ES, Run the below command
213+
214+
```
215+
npm run view-data a12a4180-65aa-42ec-a945-5fd21dec0501
216+
```
217+
218+
- To check the update of reviews, Write the below message into topic `submission.notification.update` and check data using above `view-data` command
219+
220+
```
221+
{ "topic":"submission.notification.update", "originator":"submission-api", "timestamp":"2018-08-06T15:46:05.575Z", "mime-type":"application/json", "payload":{ "resource":"review", "id": "d34d4180-65aa-42ec-a945-5fd21dec0502", "score": 93.2, "updatedBy": "test" } }
222+
```
223+
224+
- To check the deletion of reviews, Write the below message into topic `submission.notification.delete` and check data using above `view-data` command
225+
226+
```
227+
{ "topic":"submission.notification.delete", "originator":"submission-api", "timestamp":"2018-08-06T15:46:05.575Z", "mime-type":"application/json", "payload":{ "resource":"review", "id": "d34d4180-65aa-42ec-a945-5fd21dec0503" } }
228+
```

config/default.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ module.exports = {
2020
HOST: process.env.ES_HOST,
2121
AWS_REGION: process.env.AWS_REGION || 'us-east-1', // AWS Region to be used if we use AWS ES
2222
API_VERSION: process.env.ES_API_VERSION || '6.3',
23-
ES_INDEX: process.env.ES_INDEX || 'submission-test',
23+
ES_INDEX: process.env.ES_INDEX || 'submission',
2424
ES_TYPE: process.env.ES_TYPE || '_doc' // ES 6.x accepts only 1 Type per index and it's mandatory to define it
2525
}
2626
}

src/services/ProcessorService.js

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,27 @@
22
* Service for submission processor.
33
*/
44

5+
const _ = require('lodash')
56
const Joi = require('joi')
67
const logger = require('../common/logger')
78
const helper = require('../common/helper')
89
const config = require('config')
910

1011
const client = helper.getESClient()
1112

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+
1226
/**
1327
* Create message in Elasticsearch.
1428
* @param {Object} message the message
@@ -20,6 +34,35 @@ function * create (message) {
2034
id: message.payload.id,
2135
body: message.payload
2236
})
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+
}
2366
}
2467

2568
create.schema = {
@@ -46,6 +89,34 @@ function * update (message) {
4689
id: message.payload.id,
4790
body: { doc: message.payload }
4891
})
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+
}
49120
}
50121

51122
update.schema = create.schema
@@ -55,6 +126,29 @@ update.schema = create.schema
55126
* @param {Object} message the message
56127
*/
57128
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+
58152
yield client.delete({
59153
index: config.get('esConfig.ES_INDEX'),
60154
type: config.get('esConfig.ES_TYPE'),

0 commit comments

Comments
 (0)