From 869be3c2739596159e8aa527ee82a35315176a57 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Wed, 12 Jun 2024 00:28:11 +0200 Subject: [PATCH] Improvements --- backend/src/services/user/user-dal.ts | 9 +++ backend/src/services/user/user-service.ts | 70 ++++------------------- 2 files changed, 19 insertions(+), 60 deletions(-) diff --git a/backend/src/services/user/user-dal.ts b/backend/src/services/user/user-dal.ts index f2da0df0e..d0b03019f 100644 --- a/backend/src/services/user/user-dal.ts +++ b/backend/src/services/user/user-dal.ts @@ -94,6 +94,14 @@ export const userDALFactory = (db: TDbClient) => { } }; + const findMergeableUsers = async (email: string, tx?: Knex) => { + const users = await (tx || db)(TableName.Users).where((builder) => { + void builder.where({ email, isEmailVerified: true }).orWhere({ email, isAccepted: false }); + }); + + return users; + }; + const updateUserEncryptionByUserId = async (userId: string, data: TUserEncryptionKeysUpdate, tx?: Knex) => { try { const [userEnc] = await (tx || db)(TableName.UserEncryptionKey) @@ -154,6 +162,7 @@ export const userDALFactory = (db: TDbClient) => { findUsersByProjectMembershipIds, upsertUserEncryptionKey, createUserEncryption, + findMergeableUsers, findOneUserAction, createUserAction }; diff --git a/backend/src/services/user/user-service.ts b/backend/src/services/user/user-service.ts index b2f3910c0..f04e0b35f 100644 --- a/backend/src/services/user/user-service.ts +++ b/backend/src/services/user/user-service.ts @@ -12,6 +12,7 @@ type TUserServiceFactoryDep = { userDAL: Pick< TUserDALFactory, | "find" + | "findMergeableUsers" | "findOne" | "findById" | "transaction" @@ -86,13 +87,7 @@ export const userServiceFactory = ({ ); // check if there are users with the same email. - const users = await userDAL.find( - { - email, - isEmailVerified: true - }, - { tx } - ); + const users = await userDAL.findMergeableUsers(email, tx); if (users.length > 1) { // merge users @@ -134,59 +129,14 @@ export const userServiceFactory = ({ ); } } else { - const existingUserWithUsername = await userDAL.findOne({ - username: email - }); - - if (existingUserWithUsername && existingUserWithUsername.id !== user.id) { - // merge users - const mergeUserOrgMembershipSet = new Set( - (await orgMembershipDAL.find({ userId: existingUserWithUsername.id }, { tx })).map((m) => m.orgId) - ); - - const myOrgMemberships = (await orgMembershipDAL.find({ userId: user.id }, { tx })).filter( - (m) => !mergeUserOrgMembershipSet.has(m.orgId) - ); - - const userAliases = await userAliasDAL.find( - { - userId: user.id - }, - { tx } - ); - - // delete current user - await userDAL.deleteById(user.id, tx); - - if (myOrgMemberships.length) { - await orgMembershipDAL.insertMany( - myOrgMemberships.map((orgMembership) => ({ - ...orgMembership, - userId: existingUserWithUsername.id - })), - tx - ); - } - - if (userAliases.length) { - await userAliasDAL.insertMany( - userAliases.map((userAlias) => ({ - ...userAlias, - userId: existingUserWithUsername.id - })), - tx - ); - } - } else { - // update current user's username to [email] - await userDAL.updateById( - user.id, - { - username: email - }, - tx - ); - } + // update current user's username to [email] + await userDAL.updateById( + user.id, + { + username: email + }, + tx + ); } }); };