From bd612bd3107de63bf33a814a808425597a12aecb Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 15 Jan 2024 11:23:01 +0800 Subject: [PATCH] replace username too --- packages/api/src/resolvers/user/index.ts | 8 ++------ packages/api/src/services/user.ts | 23 +++++++++++++++++++++-- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/packages/api/src/resolvers/user/index.ts b/packages/api/src/resolvers/user/index.ts index dad2a13fa..c15000a66 100644 --- a/packages/api/src/resolvers/user/index.ts +++ b/packages/api/src/resolvers/user/index.ts @@ -42,7 +42,7 @@ import { import { userRepository } from '../../repository/user' import { createUser } from '../../services/create_user' import { sendVerificationEmail } from '../../services/send_emails' -import { updateUser } from '../../services/user' +import { softDeleteUser } from '../../services/user' import { authorized, userDataToUser } from '../../utils/helpers' import { validateUsername } from '../../utils/usernamePolicy' import { WithDataSourcesContext } from '../types' @@ -321,11 +321,7 @@ export const deleteAccountResolver = authorized< MutationDeleteAccountArgs >(async (_, { userID }, { log }) => { // soft delete user and change email address for user to sign up again - const result = await updateUser(userID, { - status: StatusType.Deleted, - email: `deleted_user_${userID}@omnivore.app`, - sourceUserId: `deleted_user_${userID}`, - }) + const result = await softDeleteUser(userID) if (!result.affected) { log.error('Error deleting user account') diff --git a/packages/api/src/services/user.ts b/packages/api/src/services/user.ts index d7f9fa0d3..4d0580c88 100644 --- a/packages/api/src/services/user.ts +++ b/packages/api/src/services/user.ts @@ -1,4 +1,5 @@ import { DeepPartial, FindOptionsWhere, In } from 'typeorm' +import { Profile } from '../entity/profile' import { StatusType, User } from '../entity/user' import { authTrx, getRepository, queryBuilderToRawSql } from '../repository' import { userRepository } from '../repository/user' @@ -14,9 +15,27 @@ export const deleteUser = async (userId: string) => { ) } -export const updateUser = async (userId: string, update: Partial) => { +export const softDeleteUser = async (userId: string) => { return authTrx( - async (t) => t.getRepository(User).update(userId, update), + async (t) => { + // change email address and username for user to sign up again + await t.getRepository(Profile).update( + { + user: { + id: userId, + }, + }, + { + username: `deleted_user_${userId}`, + } + ) + + return t.getRepository(User).update(userId, { + status: StatusType.Deleted, + email: `deleted_user_${userId}@omnivore.app`, + sourceUserId: `deleted_user_${userId}`, + }) + }, undefined, userId )