1
1
const externalAccountsModel = require ( "../models/external-accounts" ) ;
2
2
const { SOMETHING_WENT_WRONG , INTERNAL_SERVER_ERROR } = require ( "../constants/errorMessages" ) ;
3
3
const { getDiscordMembers } = require ( "../services/discordService" ) ;
4
- const { getDiscordUsers, addOrUpdate } = require ( "../models/users" ) ;
4
+ const { addOrUpdate } = require ( "../models/users" ) ;
5
+ const { retrieveDiscordUsers } = require ( "../services/dataAccessLayer" ) ;
5
6
const logger = require ( "../utils/logger" ) ;
6
7
7
8
const addExternalAccountData = async ( req , res ) => {
@@ -51,9 +52,10 @@ const getExternalAccountData = async (req, res) => {
51
52
*/
52
53
const syncExternalAccountData = async ( req , res ) => {
53
54
try {
54
- const [ discordUserData , rdsUserData ] = await Promise . all ( [ getDiscordMembers ( ) , getDiscordUsers ( ) ] ) ;
55
+ const [ discordUserData , rdsUserData ] = await Promise . all ( [ getDiscordMembers ( ) , retrieveDiscordUsers ( ) ] ) ;
55
56
const rdsUserDataMap = { } ;
56
57
const updateUserDataPromises = [ ] ;
58
+ const userUpdatedWithInDiscordFalse = [ ] ;
57
59
58
60
rdsUserData . forEach ( ( rdsUser ) => {
59
61
rdsUserDataMap [ rdsUser . discordId ] = {
@@ -62,25 +64,36 @@ const syncExternalAccountData = async (req, res) => {
62
64
} ;
63
65
} ) ;
64
66
65
- discordUserData . forEach ( ( discordUser ) => {
66
- const mappedRdsUser = rdsUserDataMap [ discordUser . user . id ] ;
67
- if ( mappedRdsUser ) {
68
- const userData = {
67
+ for ( const rdsUser of rdsUserData ) {
68
+ const discordUser = discordUserData . find ( ( discordUser ) => discordUser . user . id === rdsUser . discordId ) ;
69
+
70
+ let userData = { } ;
71
+ if ( rdsUser . roles ?. in_discord && ! discordUser ) {
72
+ userData = {
73
+ roles : {
74
+ ...rdsUser . roles ,
75
+ in_discord : false ,
76
+ } ,
77
+ } ;
78
+ userUpdatedWithInDiscordFalse . push ( rdsUser ) ;
79
+ } else if ( discordUser ) {
80
+ userData = {
69
81
discordJoinedAt : discordUser . joined_at ,
70
82
roles : {
71
- ...mappedRdsUser . roles ,
83
+ ...rdsUser . roles ,
72
84
in_discord : true ,
73
85
} ,
74
86
} ;
75
- updateUserDataPromises . push ( addOrUpdate ( userData , mappedRdsUser . id ) ) ;
76
87
}
77
- } ) ;
88
+ updateUserDataPromises . push ( addOrUpdate ( userData , rdsUser . id ) ) ;
89
+ }
78
90
79
91
await Promise . all ( updateUserDataPromises ) ;
80
92
81
93
return res . json ( {
82
94
rdsUsers : rdsUserData . length ,
83
95
discordUsers : discordUserData . length ,
96
+ userUpdatedWithInDiscordFalse : userUpdatedWithInDiscordFalse . length ,
84
97
message : "Data Sync Complete" ,
85
98
} ) ;
86
99
} catch ( err ) {
0 commit comments