@@ -59,7 +59,7 @@ const addOrUpdate = async (userData, userId = null) => {
59
59
userData . roles = { archived : false } ;
60
60
userData . incompleteUserDetails = true ;
61
61
const userInfo = await userModel . add ( userData ) ;
62
- return { isNewUser : true , userId : userInfo . id } ;
62
+ return { isNewUser : true , userId : userInfo . id , incompleteUserDetails : true } ;
63
63
} catch ( err ) {
64
64
logger . error ( "Error in adding or updating user" , err ) ;
65
65
throw err ;
@@ -224,7 +224,7 @@ const fetchUsers = async (usernames = []) => {
224
224
* @param { Object }: Object with username and userId, any of the two can be used
225
225
* @return {Promise<{userExists: boolean, user: <userModel>}|{userExists: boolean, user: <userModel>}> }
226
226
*/
227
- const fetchUser = async ( { userId = null , username = null } ) => {
227
+ const fetchUser = async ( { userId = null , username = null , githubUsername = null } ) => {
228
228
try {
229
229
let userData , id ;
230
230
if ( username ) {
@@ -238,6 +238,12 @@ const fetchUser = async ({ userId = null, username = null }) => {
238
238
const user = await userModel . doc ( userId ) . get ( ) ;
239
239
id = userId ;
240
240
userData = user . data ( ) ;
241
+ } else if ( githubUsername ) {
242
+ const user = await userModel . where ( "github_id" , "==" , githubUsername ) . limit ( 1 ) . get ( ) ;
243
+ user . forEach ( ( doc ) => {
244
+ id = doc . id ;
245
+ userData = doc . data ( ) ;
246
+ } ) ;
241
247
}
242
248
return {
243
249
userExists : ! ! userData ,
@@ -335,6 +341,16 @@ const fetchUserSkills = async (id) => {
335
341
}
336
342
} ;
337
343
344
+ const getRdsUserInfoByGitHubUsername = async ( githubUsername ) => {
345
+ const { user } = await fetchUser ( { githubUsername } ) ;
346
+
347
+ return {
348
+ firstName : user . first_name ?? "" ,
349
+ lastName : user . last_name ?? "" ,
350
+ username : user . username ?? "" ,
351
+ } ;
352
+ } ;
353
+
338
354
/**
339
355
* Fetches user data based on the filter query
340
356
*
@@ -379,18 +395,24 @@ const getUsersBasedOnFilter = async (query) => {
379
395
let finalItems = [ ] ;
380
396
381
397
if ( doesTagQueryExist && doesStateQueryExist ) {
382
- const stateItemIds = new Set ( stateItems . map ( ( item ) => item . userId ) ) ;
383
- finalItems = tagItems . filter ( ( item ) => stateItemIds . has ( item . itemId ) ) . map ( ( item ) => item . itemId ) ;
398
+ if ( stateItems . length && tagItems . length ) {
399
+ const stateItemIds = new Set ( stateItems . map ( ( item ) => item . userId ) ) ;
400
+ finalItems = tagItems . filter ( ( item ) => stateItemIds . has ( item . itemId ) ) . map ( ( item ) => item . itemId ) ;
401
+ }
384
402
} else if ( doesStateQueryExist ) {
385
403
finalItems = stateItems . map ( ( item ) => item . userId ) ;
386
404
} else if ( doesTagQueryExist ) {
387
405
finalItems = tagItems . map ( ( item ) => item . itemId ) ;
388
406
}
389
407
390
- finalItems = [ ...new Set ( finalItems ) ] ;
391
- const userRefs = finalItems . map ( ( itemId ) => userModel . doc ( itemId ) ) ;
392
- const userDocs = ( await firestore . getAll ( ...userRefs ) ) . map ( ( doc ) => ( { id : doc . id , ...doc . data ( ) } ) ) ;
393
- return userDocs ;
408
+ if ( finalItems . length ) {
409
+ finalItems = [ ...new Set ( finalItems ) ] ;
410
+ const userRefs = finalItems . map ( ( itemId ) => userModel . doc ( itemId ) ) ;
411
+ const userDocs = ( await firestore . getAll ( ...userRefs ) ) . map ( ( doc ) => ( { id : doc . id , ...doc . data ( ) } ) ) ;
412
+ const filteredUserDocs = userDocs . filter ( ( doc ) => ! doc . roles ?. archived ) ;
413
+ return filteredUserDocs ;
414
+ }
415
+ return [ ] ;
394
416
} ;
395
417
396
418
module . exports = {
@@ -405,6 +427,7 @@ module.exports = {
405
427
getJoinData,
406
428
getSuggestedUsers,
407
429
fetchUserSkills,
430
+ getRdsUserInfoByGitHubUsername,
408
431
fetchUsers,
409
432
getUsersBasedOnFilter,
410
433
} ;
0 commit comments