@@ -64,6 +64,7 @@ function omitMemberAttributes (currentUser, mb) {
64
64
async function getMember ( currentUser , handle , query ) {
65
65
// validate and parse query parameter
66
66
const selectFields = helper . parseCommaSeparatedString ( query . fields , MEMBER_FIELDS ) || MEMBER_FIELDS
67
+
67
68
// query member from Elasticsearch
68
69
const esQuery = {
69
70
index : config . ES . MEMBER_PROFILE_ES_INDEX ,
@@ -80,11 +81,24 @@ async function getMember (currentUser, handle, query) {
80
81
}
81
82
// Search with constructed query
82
83
let members = await esClient . search ( esQuery )
84
+
83
85
if ( members . hits . total === 0 ) {
84
- throw new errors . NotFoundError ( `Member with handle: "${ handle } " doesn't exist` )
86
+ logger . debug ( `Member ${ handle } not found in ES. Lookup in DynamoDB...` )
87
+ try {
88
+ // Check if the member handle exists in DynamoDB
89
+ members = [ await helper . getMemberByHandle ( handle ) ]
90
+ // Memember was found in DynamoDB but not ES. Send message to member-processor-es
91
+ // to index the member in ES. It's safe to use the "create" topic since the processor
92
+ // will only create a new item of the item doesn't exist, otherwise it'll perform an update operation.
93
+ helper . postBusEvent ( constants . TOPICS . MemberCreated , members [ 0 ] . originalItem ( ) )
94
+ } catch ( e ) {
95
+ logger . debug ( `Member ${ handle } not found in DynamoDB.` )
96
+ throw new errors . NotFoundError ( `Member with handle: "${ handle } " doesn't exist` )
97
+ }
85
98
} else {
86
99
members = _ . map ( members . hits . hits , '_source' )
87
100
}
101
+
88
102
// get the 'maxRating' from stats
89
103
if ( _ . includes ( selectFields , 'maxRating' ) ) {
90
104
for ( let i = 0 ; i < members . length ; i += 1 ) {
0 commit comments