@@ -243,26 +243,50 @@ public static List<String> isEmailVerified_transaction(Start start, Connection s
243243 return new ArrayList <>();
244244 }
245245 List <String > emails = new ArrayList <>();
246- List <String > userIds = new ArrayList <>();
247- Map <String , String > userIdToEmailMap = new HashMap <>();
246+ List <String > supertokensUserIds = new ArrayList <>();
248247 for (UserIdAndEmail ue : userIdAndEmail ) {
249248 emails .add (ue .email );
250- userIds .add (ue .userId );
249+ supertokensUserIds .add (ue .userId );
251250 }
251+
252+ // We have external user id stored in the email verification table, so we need to fetch the mapped userids for
253+ // calculating the verified emails
254+
255+ HashMap <String , String > supertokensUserIdToExternalUserIdMap = UserIdMappingQueries .getUserIdMappingWithUserIds_Transaction (start ,
256+ sqlCon , supertokensUserIds );
257+ HashMap <String , String > externalUserIdToSupertokensUserIdMap = new HashMap <>();
258+
259+ List <String > supertokensOrExternalUserIdsToQuery = new ArrayList <>();
260+ for (String userId : supertokensUserIds ) {
261+ if (supertokensUserIdToExternalUserIdMap .containsKey (userId )) {
262+ supertokensOrExternalUserIdsToQuery .add (supertokensUserIdToExternalUserIdMap .get (userId ));
263+ externalUserIdToSupertokensUserIdMap .put (supertokensUserIdToExternalUserIdMap .get (userId ), userId );
264+ } else {
265+ supertokensOrExternalUserIdsToQuery .add (userId );
266+ externalUserIdToSupertokensUserIdMap .put (userId , userId );
267+ }
268+ }
269+
270+ Map <String , String > supertokensOrExternalUserIdToEmailMap = new HashMap <>();
252271 for (UserIdAndEmail ue : userIdAndEmail ) {
253- if (userIdToEmailMap .containsKey (ue .userId )) {
272+ String supertokensOrExternalUserId = ue .userId ;
273+ if (supertokensUserIdToExternalUserIdMap .containsKey (supertokensOrExternalUserId )) {
274+ supertokensOrExternalUserId = supertokensUserIdToExternalUserIdMap .get (supertokensOrExternalUserId );
275+ }
276+ if (supertokensOrExternalUserIdToEmailMap .containsKey (supertokensOrExternalUserId )) {
254277 throw new RuntimeException ("Found a bug!" );
255278 }
256- userIdToEmailMap .put (ue . userId , ue .email );
279+ supertokensOrExternalUserIdToEmailMap .put (supertokensOrExternalUserId , ue .email );
257280 }
281+
258282 String QUERY = "SELECT * FROM " + getConfig (start ).getEmailVerificationTable ()
259- + " WHERE app_id = ? AND user_id IN (" + Utils .generateCommaSeperatedQuestionMarks (userIds .size ()) +
283+ + " WHERE app_id = ? AND user_id IN (" + Utils .generateCommaSeperatedQuestionMarks (supertokensOrExternalUserIdsToQuery .size ()) +
260284 ") AND email IN (" + Utils .generateCommaSeperatedQuestionMarks (emails .size ()) + ")" ;
261285
262286 return execute (sqlCon , QUERY , pst -> {
263287 pst .setString (1 , appIdentifier .getAppId ());
264288 int index = 2 ;
265- for (String userId : userIds ) {
289+ for (String userId : supertokensOrExternalUserIdsToQuery ) {
266290 pst .setString (index ++, userId );
267291 }
268292 for (String email : emails ) {
@@ -271,10 +295,10 @@ public static List<String> isEmailVerified_transaction(Start start, Connection s
271295 }, result -> {
272296 List <String > res = new ArrayList <>();
273297 while (result .next ()) {
274- String userId = result .getString ("user_id" );
298+ String supertokensOrExternalUserId = result .getString ("user_id" );
275299 String email = result .getString ("email" );
276- if (Objects .equals (userIdToEmailMap .get (userId ), email )) {
277- res .add (userId );
300+ if (Objects .equals (supertokensOrExternalUserIdToEmailMap .get (supertokensOrExternalUserId ), email )) {
301+ res .add (externalUserIdToSupertokensUserIdMap . get ( supertokensOrExternalUserId ) );
278302 }
279303 }
280304 return res ;
@@ -288,26 +312,46 @@ public static List<String> isEmailVerified(Start start, AppIdentifier appIdentif
288312 return new ArrayList <>();
289313 }
290314 List <String > emails = new ArrayList <>();
291- List <String > userIds = new ArrayList <>();
292- Map < String , String > userIdToEmailMap = new HashMap <>();
315+ List <String > supertokensUserIds = new ArrayList <>();
316+
293317 for (UserIdAndEmail ue : userIdAndEmail ) {
294318 emails .add (ue .email );
295- userIds .add (ue .userId );
319+ supertokensUserIds .add (ue .userId );
320+ }
321+ // We have external user id stored in the email verification table, so we need to fetch the mapped userids for
322+ // calculating the verified emails
323+ HashMap <String , String > supertokensUserIdToExternalUserIdMap = UserIdMappingQueries .getUserIdMappingWithUserIds (start ,
324+ supertokensUserIds );
325+ HashMap <String , String > externalUserIdToSupertokensUserIdMap = new HashMap <>();
326+ List <String > supertokensOrExternalUserIdsToQuery = new ArrayList <>();
327+ for (String userId : supertokensUserIds ) {
328+ if (supertokensUserIdToExternalUserIdMap .containsKey (userId )) {
329+ supertokensOrExternalUserIdsToQuery .add (supertokensUserIdToExternalUserIdMap .get (userId ));
330+ externalUserIdToSupertokensUserIdMap .put (supertokensUserIdToExternalUserIdMap .get (userId ), userId );
331+ } else {
332+ supertokensOrExternalUserIdsToQuery .add (userId );
333+ externalUserIdToSupertokensUserIdMap .put (userId , userId );
334+ }
296335 }
336+
337+ Map <String , String > supertokensOrExternalUserIdToEmailMap = new HashMap <>();
297338 for (UserIdAndEmail ue : userIdAndEmail ) {
298- if (userIdToEmailMap .containsKey (ue .userId )) {
339+ String supertokensOrExternalUserId = ue .userId ;
340+ if (supertokensUserIdToExternalUserIdMap .containsKey (supertokensOrExternalUserId )) {
341+ supertokensOrExternalUserId = supertokensUserIdToExternalUserIdMap .get (supertokensOrExternalUserId );
342+ }
343+ if (supertokensOrExternalUserIdToEmailMap .containsKey (supertokensOrExternalUserId )) {
299344 throw new RuntimeException ("Found a bug!" );
300345 }
301- userIdToEmailMap .put (ue . userId , ue .email );
346+ supertokensOrExternalUserIdToEmailMap .put (supertokensOrExternalUserId , ue .email );
302347 }
303348 String QUERY = "SELECT * FROM " + getConfig (start ).getEmailVerificationTable ()
304- + " WHERE app_id = ? AND user_id IN (" + Utils .generateCommaSeperatedQuestionMarks (userIds .size ()) +
349+ + " WHERE app_id = ? AND user_id IN (" + Utils .generateCommaSeperatedQuestionMarks (supertokensOrExternalUserIdsToQuery .size ()) +
305350 ") AND email IN (" + Utils .generateCommaSeperatedQuestionMarks (emails .size ()) + ")" ;
306-
307351 return execute (start , QUERY , pst -> {
308352 pst .setString (1 , appIdentifier .getAppId ());
309353 int index = 2 ;
310- for (String userId : userIds ) {
354+ for (String userId : supertokensOrExternalUserIdsToQuery ) {
311355 pst .setString (index ++, userId );
312356 }
313357 for (String email : emails ) {
@@ -316,10 +360,10 @@ public static List<String> isEmailVerified(Start start, AppIdentifier appIdentif
316360 }, result -> {
317361 List <String > res = new ArrayList <>();
318362 while (result .next ()) {
319- String userId = result .getString ("user_id" );
363+ String supertokensOrExternalUserId = result .getString ("user_id" );
320364 String email = result .getString ("email" );
321- if (Objects .equals (userIdToEmailMap .get (userId ), email )) {
322- res .add (userId );
365+ if (Objects .equals (supertokensOrExternalUserIdToEmailMap .get (supertokensOrExternalUserId ), email )) {
366+ res .add (externalUserIdToSupertokensUserIdMap . get ( supertokensOrExternalUserId ) );
323367 }
324368 }
325369 return res ;
0 commit comments