Skip to content

Commit 918f970

Browse files
author
Sachin Maheshwari
committed
adding logic for user group checking.
1 parent d30fbef commit 918f970

File tree

2 files changed

+120
-56
lines changed

2 files changed

+120
-56
lines changed

src/common/broadcastAPIHelper.js

Lines changed: 115 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -15,74 +15,136 @@ async function getM2MToken() {
1515
return m2m.getMachineToken(config.AUTH0_CLIENT_ID, config.AUTH0_CLIENT_SECRET)
1616
}
1717

18+
/**
19+
* Helper Function - get member profile
20+
* @param {Integer} userId
21+
*/
1822
async function getMemberInfo(userId) {
1923
const url = config.TC_API_V3_BASE_URL +
20-
`/members/_search/?fields=userId%2Cskills&query=userId%3A${userId}&limit=1`
21-
return new Promise(function (resolve, reject) {
24+
"/members/_search/?" +
25+
"fields=userId%2Cskills" +
26+
`&query=userId%3A${userId}` +
27+
`&limit=1`
28+
return new Promise(async function (resolve, reject) {
2229
let memberInfo = []
2330
logger.info(`calling member api ${url} `)
24-
request
25-
.get(url).then((res) => {
26-
if (!_.get(res, 'body.result.success')) {
27-
reject(new Error(`Failed to get member api detail for user id ${userId}`))
28-
}
29-
memberInfo = _.get(res, 'body.result.content')
30-
logger.info(`Feteched ${memberInfo.length} record(s) from member api`)
31-
resolve(memberInfo)
32-
})
33-
.catch((err) => {
34-
reject(new Error(`Failed to get member api detail for user id ${userId}, ${err}`))
35-
})
31+
try {
32+
const res = await request.get(url)
33+
if (!_.get(res, 'body.result.success')) {
34+
reject(new Error(`BCA Memeber API: Failed to get member detail for user id ${userId}`))
35+
}
36+
memberInfo = _.get(res, 'body.result.content')
37+
logger.info(`BCA Memeber API: Feteched ${memberInfo.length} record(s) from member api`)
38+
resolve(memberInfo)
39+
} catch (err) {
40+
reject(new Error(`BCA Memeber API: Failed to get member api detail for user id ${userId}, ${err}`))
41+
}
3642

3743
})
38-
// Need clean-up
39-
/*const m2m = await getM2MToken().catch((err) => {
40-
logger.error(`${logPrefix} Failed to get m2m token`)
41-
return new Promise(function(res, rej) {
42-
rej(err)
43-
})
44+
}
45+
46+
/**
47+
* Helper Function - get user group
48+
* @param {Integer} userId
49+
*/
50+
async function getUserGroup(userId) {
51+
//TODO need to take care of pagination
52+
const url = config.TC_API_V5_BASE_URL +
53+
`/groups/?memberId=${userId}` +
54+
"&membershipType=user&page=1"
55+
let groupInfo = []
56+
return new Promise(async (resolve, reject) => {
57+
try {
58+
const machineToken = await getM2MToken()
59+
//logger.info(`BCA Group API: got m2m token of length ${machineToken.length}`)
60+
const res = await request.get(url).set('Authorization', `Bearer ${machineToken}`);
61+
if (_.get(res, 'res.statusCode') != 200) {
62+
reject(new Error(`BCA Group API: Failed to get group detail for user id ${userId}`))
63+
}
64+
groupInfo = _.get(res, 'body')
65+
logger.info(`BCA Group API: Feteched ${groupInfo.length} record(s) from group api`)
66+
resolve(groupInfo)
67+
} catch (e) {
68+
reject(`Calling group api ${e}`)
69+
}
4470
})
45-
logger.info(`${logPrefix} Fetched m2m token sucessfully. Token length is: `, m2m.length)
46-
*/
47-
//return request.get(url)
4871
}
4972

5073
async function checkBroadcastMessageForUser(userId, bulkMessage) {
5174
return new Promise(function (resolve, reject) {
52-
const skills = _.get(bulkMessage, 'recipients.skills')
53-
logger.info(`Got skills in DB...`, skills)
54-
if (skills && skills.length > 0) {
55-
try {
56-
getMemberInfo(userId).then((m) => {
57-
let flag = false
58-
logger.info(`${logPrefix} got member info.`)
59-
const ms = _.get(m[0], "skills")
60-
const memberSkills = []
61-
_.map(ms, (o) => {
62-
memberSkills.push(_.get(o, 'name').toLowerCase())
63-
})
64-
logger.info(`${logPrefix} user id have following skills`, memberSkills)
65-
_.map(skills, (s) => {
66-
if (_.indexOf(memberSkills, s.toLowerCase()) >= 0) {
67-
flag = true;
68-
logger.info(`${logPrefix} '${s}' skill matached for user id ${userId}`)
69-
}
70-
})
71-
resolve({
72-
record: bulkMessage,
73-
result: flag
74-
})
75-
}).catch((err) => {
76-
reject(err)
75+
Promise.all([
76+
checkUserSkill(userId, bulkMessage),
77+
checkUserGroup(userId, bulkMessage),
78+
]).then((results) => {
79+
let flag = true // TODO need to be sure about default value
80+
_.map(results, (r) => {
81+
flag = !r ? false : flag // TODO recheck condition
82+
})
83+
logger.info(`Final condition result is: ${flag}`)
84+
resolve({
85+
record: bulkMessage,
86+
result: flag
87+
})
88+
}).catch((err) => {
89+
reject(`${logPrefix} got issue in checking recipient condition. ${err}`)
90+
})
91+
}) // promise end
92+
}
93+
94+
/**
95+
* Helper function - check Skill condition
96+
*/
97+
async function checkUserSkill(userId, bulkMessage) {
98+
return new Promise(async function (resolve, reject) {
99+
try {
100+
const skills = _.get(bulkMessage, 'recipients.skills')
101+
let flag = true // allow for all
102+
if (skills && skills.length > 0) {
103+
const m = await getMemberInfo(userId)
104+
const ms = _.get(m[0], "skills") // get member skills
105+
const memberSkills = []
106+
flag = false
107+
_.map(ms, (o) => {
108+
memberSkills.push(_.get(o, 'name').toLowerCase())
109+
})
110+
_.map(skills, (s) => {
111+
if (_.indexOf(memberSkills, s.toLowerCase()) >= 0) {
112+
flag = true
113+
logger.info(`BroadcastMessageId: ${bulkMessage.id}, '${s}' skill matached for user id ${userId}`)
114+
}
77115
})
78-
} catch (err) {
79-
reject(new Error(`${logPrefix} issue at skill condition check, ${err.message}`))
80116
}
81-
} else {
82-
resolve(true) // no condition on recipient, so for all
117+
resolve(flag)
118+
} catch (e) {
119+
reject(e)
83120
}
84-
}) // promise end
121+
}) // promise end
122+
}
85123

124+
/**
125+
* Helper function - check group condition
126+
*/
127+
async function checkUserGroup(userId, bulkMessage) {
128+
return new Promise(async function (resolve, reject) {
129+
try {
130+
const groups = _.get(bulkMessage, 'recipients.groups')
131+
let flag = true // TODO
132+
if (groups.length > 0) {
133+
flag = false
134+
const groupInfo = await getUserGroup(userId)
135+
_.map(groupInfo, (o) => {
136+
if (_.indexOf(groups, "public") >= 0) {
137+
flag = (_.get(o, "privateGroup")) ? false : flag
138+
} else {
139+
flag = (_.indexOf(groups, _.get(o, "name")) >= 0) ? true : flag
140+
}
141+
})
142+
}
143+
resolve(flag)
144+
} catch (e) {
145+
reject(e)
146+
}
147+
})
86148
}
87149

88150
module.exports = {

src/services/NotificationService.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,11 @@ function* listNotifications(query, userId) {
205205
}
206206

207207
if (config.ENABLE_HOOK_BULK_NOTIFICATION) {
208-
yield hooks.hookBulkMessage.checkBulkMessageForUser(userId).catch((e) => {
209-
logger.error(`Issue in calling bulk notification hook.`, e)
210-
})
208+
try {
209+
yield hooks.hookBulkMessage.checkBulkMessageForUser(userId)
210+
} catch (e) {
211+
logger.error(`Error in calling bulk notification hook: ${e}`)
212+
}
211213
}
212214

213215
if (_.keys(notificationSettings).length > 0) {

0 commit comments

Comments
 (0)