Skip to content

Combine review and reviewSummation with Submission #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 23, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,3 +190,39 @@ info: The data is not found.
`{ "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 } }`
- reviewSummation:
`{ "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" } }`


### Verification for combining review and reviewSummation with Submission

- From the `submissions-api` repository, Run the command `npm run create-index` to create index with specified data types

- Run the command `npm run init-es` to load test data into ES

- Now from the Kafka console producer, Write the below messages into topic `submission.notification.create`

```
{ "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" } }


{ "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" } }
```

- This will create two reviews as well as attach the reviews with a submission

- To look at the updated submission in ES, Run the below command

```
npm run view-data a12a4180-65aa-42ec-a945-5fd21dec0501
```

- To check the update of reviews, Write the below message into topic `submission.notification.update` and check data using above `view-data` command

```
{ "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" } }
```

- To check the deletion of reviews, Write the below message into topic `submission.notification.delete` and check data using above `view-data` command

```
{ "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" } }
```
2 changes: 1 addition & 1 deletion config/default.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ module.exports = {
HOST: process.env.ES_HOST,
AWS_REGION: process.env.AWS_REGION || 'us-east-1', // AWS Region to be used if we use AWS ES
API_VERSION: process.env.ES_API_VERSION || '6.3',
ES_INDEX: process.env.ES_INDEX || 'submission-test',
ES_INDEX: process.env.ES_INDEX || 'submission',
ES_TYPE: process.env.ES_TYPE || '_doc' // ES 6.x accepts only 1 Type per index and it's mandatory to define it
}
}
94 changes: 94 additions & 0 deletions src/services/ProcessorService.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,27 @@
* Service for submission processor.
*/

const _ = require('lodash')
const Joi = require('joi')
const logger = require('../common/logger')
const helper = require('../common/helper')
const config = require('config')

const client = helper.getESClient()

/**
* Get elastic search data.
* @param {String} id the Elastic search data id
* @returns {Object} Data from Elastic search
*/
function * getESData (id) {
return yield client.getSource({
index: config.get('esConfig.ES_INDEX'),
type: config.get('esConfig.ES_TYPE'),
id
})
}

/**
* Create message in Elasticsearch.
* @param {Object} message the message
Expand All @@ -20,6 +34,35 @@ function * create (message) {
id: message.payload.id,
body: message.payload
})

// Add review / reviewSummation to submission
if (message.payload.resource === 'review') {
const submission = yield getESData(message.payload.submissionId)
let reviewArr = []
reviewArr.push(_.omit(message.payload, ['resource']))
if (submission.review) {
reviewArr = reviewArr.concat(submission.review)
}
yield client.update({
index: config.get('esConfig.ES_INDEX'),
type: config.get('esConfig.ES_TYPE'),
id: message.payload.submissionId,
body: { doc: {review: reviewArr} }
})
} else if (message.payload.resource === 'reviewSummation') {
const submission = yield getESData(message.payload.submissionId)
let reviewSummationArr = []
reviewSummationArr.push(_.omit(message.payload, ['resource']))
if (submission.reviewSummationArr) {
reviewSummationArr = reviewSummationArr.concat(submission.review)
}
yield client.update({
index: config.get('esConfig.ES_INDEX'),
type: config.get('esConfig.ES_TYPE'),
id: message.payload.submissionId,
body: { doc: {reviewSummation: reviewSummationArr} }
})
}
}

create.schema = {
Expand All @@ -46,6 +89,34 @@ function * update (message) {
id: message.payload.id,
body: { doc: message.payload }
})

if (message.payload.resource === 'review') {
const review = yield getESData(message.payload.id)
const submission = yield getESData(review.submissionId)
const reviewToBeUpdated = _.filter(submission.review, {id: message.payload.id})[0]
_.extend(reviewToBeUpdated, _.omit(message.payload, ['resource']))
_.remove(submission.review, {id: message.payload.id})
submission.review.push(reviewToBeUpdated)
yield client.update({
index: config.get('esConfig.ES_INDEX'),
type: config.get('esConfig.ES_TYPE'),
id: submission.id,
body: { doc: {review: submission.review} }
})
} else if (message.payload.resource === 'reviewSummation') {
const reviewSummation = yield getESData(message.payload.id)
const submission = yield getESData(reviewSummation.submissionId)
const reviewSummationToBeUpdated = _.filter(submission.reviewSummation, {id: message.payload.id})[0]
_.extend(reviewSummationToBeUpdated, _.omit(message.payload, ['resource']))
_.remove(submission.reviewSummation, {id: message.payload.id})
submission.reviewSummation.push(reviewSummationToBeUpdated)
yield client.update({
index: config.get('esConfig.ES_INDEX'),
type: config.get('esConfig.ES_TYPE'),
id: submission.id,
body: { doc: {reviewSummation: submission.reviewSummation} }
})
}
}

update.schema = create.schema
Expand All @@ -55,6 +126,29 @@ update.schema = create.schema
* @param {Object} message the message
*/
function * remove (message) {
// Remove review / reviewSummation from submission data
if (message.payload.resource === 'review') {
const review = yield getESData(message.payload.id)
const submission = yield getESData(review.submissionId)
_.remove(submission.review, {id: message.payload.id})
yield client.update({
index: config.get('esConfig.ES_INDEX'),
type: config.get('esConfig.ES_TYPE'),
id: submission.id,
body: { doc: {review: submission.review} }
})
} else if (message.payload.resource === 'reviewSummation') {
const reviewSummation = yield getESData(message.payload.id)
const submission = yield getESData(reviewSummation.submissionId)
_.remove(submission.reviewSummation, {id: message.payload.id})
yield client.update({
index: config.get('esConfig.ES_INDEX'),
type: config.get('esConfig.ES_TYPE'),
id: submission.id,
body: { doc: {reviewSummation: submission.reviewSummation} }
})
}

yield client.delete({
index: config.get('esConfig.ES_INDEX'),
type: config.get('esConfig.ES_TYPE'),
Expand Down