@@ -15,74 +15,136 @@ async function getM2MToken() {
15
15
return m2m . getMachineToken ( config . AUTH0_CLIENT_ID , config . AUTH0_CLIENT_SECRET )
16
16
}
17
17
18
+ /**
19
+ * Helper Function - get member profile
20
+ * @param {Integer } userId
21
+ */
18
22
async function getMemberInfo ( userId ) {
19
23
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 ) {
22
29
let memberInfo = [ ]
23
30
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
+ }
36
42
37
43
} )
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
+ }
44
70
} )
45
- logger.info(`${logPrefix} Fetched m2m token sucessfully. Token length is: `, m2m.length)
46
- */
47
- //return request.get(url)
48
71
}
49
72
50
73
async function checkBroadcastMessageForUser ( userId , bulkMessage ) {
51
74
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
+ }
77
115
} )
78
- } catch ( err ) {
79
- reject ( new Error ( `${ logPrefix } issue at skill condition check, ${ err . message } ` ) )
80
116
}
81
- } else {
82
- resolve ( true ) // no condition on recipient, so for all
117
+ resolve ( flag )
118
+ } catch ( e ) {
119
+ reject ( e )
83
120
}
84
- } ) // promise end
121
+ } ) // promise end
122
+ }
85
123
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
+ } )
86
148
}
87
149
88
150
module . exports = {
0 commit comments