-
Notifications
You must be signed in to change notification settings - Fork 13
/
ProcessorServiceProjectMemberInvite.js
90 lines (78 loc) · 2.31 KB
/
ProcessorServiceProjectMemberInvite.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/**
* Service for challenge Elasticsearch processor.
*/
const Joi = require('joi')
const _ = require('lodash')
const logger = require('../common/logger')
const helper = require('../common/helper')
const { INVITE_STATUS } = require('../constants')
/**
* create schema
* @return {Object} the schema
*/
function createSchema () {
return Joi.object().keys({
id: Joi.number().integer().positive().required(),
projectId: Joi.number().integer().positive().required(),
userId: Joi.number().optional().allow(null),
email: Joi.string()
.email()
.optional()
.allow(null),
status: Joi.any()
.valid(_.values(INVITE_STATUS))
.required()
})
.unknown(true)
.required()
}
/**
* Create message in Elasticsearch.
* @param {Object} message the challenge created message
* @return {Promise} promise result
*/
async function create (message) {
// handle ES Update
async function updateDocPromise (doc) {
// now merge the updated changes and reindex the document
const invites = _.isArray(doc._source.invites) ? doc._source.invites : []
invites.push(message)
return _.assign(doc._source, { invites })
}
await helper.updateProjectESPromise(message.projectId, updateDocPromise)
logger.debug(`Member invite created successfully in elasticsearch index, (memberInviteId: ${message.id})`)
}
create.schema = {
message: createSchema()
}
/**
* Update message in Elasticsearch.
* @param {Object} message the challenge updated message
* @return {Promise} promise result
*/
async function update (message) {
await helper.updateProjectESPromise(message.projectId, helper.removeInvitePromise(message))
logger.debug(`Member invite updated successfully in elasticsearch index, (memberInviteId: ${message.id})`)
}
update.schema = {
message: createSchema()
}
/**
* Delete message in Elasticsearch.
* @param {Object} message the deleted message
* @return {Promise} promise result
*/
async function deleteMessage (message) {
await helper.updateProjectESPromise(message.projectId, helper.removeInvitePromise(message))
logger.debug(`Member invite deleted successfully in elasticsearch index, (memberInviteId: ${message.id})`)
}
deleteMessage.schema = {
message: createSchema()
}
// Exports
module.exports = {
create,
update,
deleteMessage
}
logger.buildService(module.exports)