From 083e9807c1de69f46a3e3b63fda89dfe5e319896 Mon Sep 17 00:00:00 2001 From: James Date: Fri, 19 Jan 2024 14:39:20 -0500 Subject: [PATCH] Adds method to look for accounts missing a subject --- .../auth/data/repository/UserRepository.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/pic-sure-auth-services/src/main/java/edu/harvard/hms/dbmi/avillach/auth/data/repository/UserRepository.java b/pic-sure-auth-services/src/main/java/edu/harvard/hms/dbmi/avillach/auth/data/repository/UserRepository.java index 2188daa24..d725fec2b 100644 --- a/pic-sure-auth-services/src/main/java/edu/harvard/hms/dbmi/avillach/auth/data/repository/UserRepository.java +++ b/pic-sure-auth-services/src/main/java/edu/harvard/hms/dbmi/avillach/auth/data/repository/UserRepository.java @@ -42,6 +42,19 @@ public User findBySubject(String subject) { .getSingleResult(); } + public User findByEmailAndConnection(String email, String connectionId) { + CriteriaQuery query = em.getCriteriaBuilder().createQuery(User.class); + Root queryRoot = query.from(User.class); + query.select(queryRoot); + CriteriaBuilder cb = cb(); + return em.createQuery(query + .where( + cb.equal(queryRoot.join("connection") + .get("id"), connectionId), + eq(cb, queryRoot, "email", email))) + .getSingleResult(); + } + public User findBySubjectAndConnection(String subject, String connectionId) { CriteriaQuery query = em.getCriteriaBuilder().createQuery(User.class); Root queryRoot = query.from(User.class); @@ -86,8 +99,16 @@ public User findOrCreate(User inputUser) { + ", subject: " + user.getSubject()); } catch (NoResultException e) { logger.debug("findOrCreate() subject " + subject + - " could not be found by `entityManager`, going to create a new user."); - user = createUser(inputUser); + " could not be found by `entityManager`, checking by email and connection"); + try { + // If the user isn't found by subject then check by email and connection just + // in case they were created by jenkins + user = findByEmailAndConnection(inputUser.getEmail(), inputUser.getConnection().getId()); + } catch (NoResultException ex) { + logger.debug("findOrCreate() email " + inputUser.getEmail() + + " could not be found by `entityManager`, creating a new user"); + user = createUser(inputUser); + } } catch (NonUniqueResultException e) { logger.error("findOrCreate() " + e.getClass().getSimpleName() + ": " + e.getMessage()); }