fix: invited user deletion added with remove user
This commit is contained in:
committed by
Andrew Bastin
parent
3c2b48a635
commit
df2d5995fd
@@ -432,12 +432,13 @@ export class AdminService {
|
|||||||
* @returns an Either of boolean or error
|
* @returns an Either of boolean or error
|
||||||
*/
|
*/
|
||||||
async removeUserAccounts(userUIDs: string[]) {
|
async removeUserAccounts(userUIDs: string[]) {
|
||||||
|
const userDeleteResult: UserDeletionResult[] = [];
|
||||||
|
|
||||||
|
// step 1: fetch all users
|
||||||
const allUsersList = await this.userService.findUsersByIds(userUIDs);
|
const allUsersList = await this.userService.findUsersByIds(userUIDs);
|
||||||
if (allUsersList.length === 0) return E.left(USERS_NOT_FOUND);
|
if (allUsersList.length === 0) return E.left(USERS_NOT_FOUND);
|
||||||
|
|
||||||
const userDeleteResult: UserDeletionResult[] = [];
|
// step 2: admin user can not be deleted without removing admin status/role
|
||||||
|
|
||||||
// Admin user can not be deleted without removing admin status/role
|
|
||||||
allUsersList.forEach((user) => {
|
allUsersList.forEach((user) => {
|
||||||
if (user.isAdmin) {
|
if (user.isAdmin) {
|
||||||
userDeleteResult.push({
|
userDeleteResult.push({
|
||||||
@@ -449,7 +450,9 @@ export class AdminService {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const nonAdminUsers = allUsersList.filter((user) => !user.isAdmin);
|
const nonAdminUsers = allUsersList.filter((user) => !user.isAdmin);
|
||||||
|
let deletedUserEmails: string[] = [];
|
||||||
|
|
||||||
|
// step 3: delete non-admin users
|
||||||
const deletionPromises = nonAdminUsers.map((user) => {
|
const deletionPromises = nonAdminUsers.map((user) => {
|
||||||
return this.userService
|
return this.userService
|
||||||
.deleteUserByUID(user)()
|
.deleteUserByUID(user)()
|
||||||
@@ -461,6 +464,8 @@ export class AdminService {
|
|||||||
errorMessage: res.left,
|
errorMessage: res.left,
|
||||||
} as UserDeletionResult;
|
} as UserDeletionResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deletedUserEmails.push(user.email);
|
||||||
return {
|
return {
|
||||||
userUID: user.uid,
|
userUID: user.uid,
|
||||||
isDeleted: true,
|
isDeleted: true,
|
||||||
@@ -470,6 +475,12 @@ export class AdminService {
|
|||||||
});
|
});
|
||||||
const promiseResult = await Promise.allSettled(deletionPromises);
|
const promiseResult = await Promise.allSettled(deletionPromises);
|
||||||
|
|
||||||
|
// step 4: revoke all the invites sent to the deleted users
|
||||||
|
await this.prisma.invitedUsers.deleteMany({
|
||||||
|
where: { inviteeEmail: { in: deletedUserEmails } },
|
||||||
|
});
|
||||||
|
|
||||||
|
// step 5: return the result
|
||||||
promiseResult.forEach((result) => {
|
promiseResult.forEach((result) => {
|
||||||
if (result.status === 'fulfilled') {
|
if (result.status === 'fulfilled') {
|
||||||
userDeleteResult.push(result.value);
|
userDeleteResult.push(result.value);
|
||||||
|
|||||||
Reference in New Issue
Block a user