@@ -403,6 +403,75 @@ const setRoleToUsersWith31DaysPlusOnboarding = async (req, res) => {
403
403
}
404
404
} ;
405
405
406
+ const generateInviteForUser = async ( req , res ) => {
407
+ try {
408
+ const { userId } = req . query ;
409
+ const userIdForInvite = userId || req . userData . id ;
410
+
411
+ const modelResponse = await discordRolesModel . getUserDiscordInvite ( userIdForInvite ) ;
412
+
413
+ if ( ! modelResponse . notFound ) {
414
+ return res . status ( 409 ) . json ( {
415
+ message : "User invite is already present!" ,
416
+ } ) ;
417
+ }
418
+
419
+ const channelId = config . get ( "discordNewComersChannelId" ) ;
420
+ const authToken = jwt . sign ( { } , config . get ( "rdsServerlessBot.rdsServerLessPrivateKey" ) , {
421
+ algorithm : "RS256" ,
422
+ expiresIn : config . get ( "rdsServerlessBot.ttl" ) ,
423
+ } ) ;
424
+
425
+ const inviteOptions = {
426
+ channelId : channelId ,
427
+ } ;
428
+ const response = await fetch ( `${ DISCORD_BASE_URL } /invite` , {
429
+ method : "POST" ,
430
+ body : JSON . stringify ( inviteOptions ) ,
431
+ headers : { "Content-Type" : "application/json" , Authorization : `Bearer ${ authToken } ` } ,
432
+ } ) ;
433
+ const discordInviteResponse = await response . json ( ) ;
434
+
435
+ const inviteCode = discordInviteResponse . data . code ;
436
+ const inviteLink = `discord.gg/${ inviteCode } ` ;
437
+
438
+ await discordRolesModel . addInviteToInviteModel ( { userId : userIdForInvite , inviteLink } ) ;
439
+
440
+ return res . status ( 201 ) . json ( {
441
+ message : "invite generated successfully" ,
442
+ inviteLink,
443
+ } ) ;
444
+ } catch ( err ) {
445
+ logger . error ( `Error in generating invite for user: ${ err } ` ) ;
446
+ return res . boom . badImplementation ( INTERNAL_SERVER_ERROR ) ;
447
+ }
448
+ } ;
449
+
450
+ const getUserDiscordInvite = async ( req , res ) => {
451
+ try {
452
+ const { userId } = req . query ;
453
+ const isSuperUser = req . userData . roles . super_user ;
454
+
455
+ if ( userId && ! isSuperUser ) return res . boom . forbidden ( "User should be super user to get link for other users" ) ;
456
+
457
+ const userIdForInvite = userId || req . userData . id ;
458
+
459
+ const invite = await discordRolesModel . getUserDiscordInvite ( userIdForInvite ) ;
460
+
461
+ if ( invite . notFound ) {
462
+ return res . boom . notFound ( "User invite doesn't exist" ) ;
463
+ }
464
+
465
+ return res . json ( {
466
+ message : "Invite returned successfully" ,
467
+ inviteLink : invite ?. inviteLink ,
468
+ } ) ;
469
+ } catch ( err ) {
470
+ logger . error ( `Error in fetching user invite: ${ err } ` ) ;
471
+ return res . boom . badImplementation ( INTERNAL_SERVER_ERROR ) ;
472
+ }
473
+ } ;
474
+
406
475
module . exports = {
407
476
getGroupsRoleId,
408
477
createGroupRole,
@@ -416,4 +485,6 @@ module.exports = {
416
485
updateUsersNicknameStatus,
417
486
syncDiscordGroupRolesInFirestore,
418
487
setRoleToUsersWith31DaysPlusOnboarding,
488
+ getUserDiscordInvite,
489
+ generateInviteForUser,
419
490
} ;
0 commit comments