@@ -53,23 +53,7 @@ async function create (message) {
5353 async function updateDocPromise ( doc ) {
5454 const members = _ . isArray ( doc . _source . members ) ? doc . _source . members : [ ]
5555 const existingMemberIndex = _ . findIndex ( members , p => p . id === message . id ) // if member does not exists already
56- let member = message
57-
58- // try to populate member with user details
59- // the code should move on, as it's not critical and is only used for searching at the moment
60- try {
61- const membersDetails = await helper . getMemberDetailsByUserIds ( [ message . userId ] )
62- const memberDetails = membersDetails [ 0 ]
63- if ( memberDetails ) {
64- member = _ . merge ( message , _ . pick ( memberDetails , 'handle' , 'firstName' , 'lastName' , 'email' ) )
65- logger . debug ( `Successfully got user details for member (userId:${ message . userId } )` )
66- } else {
67- throw new Error ( `Didn't fine user details for member (userId:${ message . userId } )` )
68- }
69- } catch ( err ) {
70- logger . error ( `Cannot populate member (userId:${ message . userId } ) with user details.` )
71- logger . debug ( `Error during populating member (userId:${ message . userId } ) with user details` , err )
72- }
56+ const member = await helper . populateMemberWithUserDetails ( message )
7357
7458 if ( existingMemberIndex === - 1 ) {
7559 members . push ( member )
@@ -78,6 +62,35 @@ async function create (message) {
7862 // from the database
7963 members . splice ( existingMemberIndex , 1 , member )
8064 }
65+
66+ // sometimes we have issue that when member accepts invitation the invitation is somehow
67+ // is not removed from the ES, so here we are making sure that invite is removed when we are adding member
68+ try { // make sure that this logic never cause an error in member adding process
69+ const invites = _ . filter ( doc . _source . invites , ( invite ) => (
70+ invite . email === member . email || invite . userId === member . userId
71+ ) )
72+
73+ if ( invites . length > 0 ) {
74+ logger . warn ( `There are ${ invites . length } invite(s) are not yet removed` +
75+ ` for member.id: ${ member . id } member.userId: ${ member . userId } .` )
76+
77+ for ( let i = 0 ; i < invites . length ; i ++ ) {
78+ const invite = invites [ i ]
79+ logger . debug ( `Removing invite.id: ${ invite . id } for member.id: ${ member . id } member.userId: ${ member . userId } .` )
80+ try {
81+ const message = { id : invite . id }
82+ const updateDocHandler = helper . removeInvitePromise ( message )
83+ await updateDocHandler ( doc )
84+ logger . debug ( `Successfully removed invite.id: ${ invite . id } .` )
85+ } catch ( err ) {
86+ logger . error ( `Failed removing invite.id: ${ invite . id } . ${ err } ` )
87+ }
88+ }
89+ }
90+ } catch ( err ) {
91+ logger . error ( `Error during removing existent invites for added member: ${ err } ` )
92+ }
93+
8194 return _ . assign ( doc . _source , { members } )
8295 }
8396
0 commit comments