From fa0280f9e9787ae9b74d22556fc59088cc2d4d74 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 12 Apr 2025 01:44:21 +0200 Subject: [PATCH] fix block user (#8363) --- backend/src/schema/resolvers/users.ts | 65 ++++++++++++++++++--------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/backend/src/schema/resolvers/users.ts b/backend/src/schema/resolvers/users.ts index e4e701006..afbdd42a6 100644 --- a/backend/src/schema/resolvers/users.ts +++ b/backend/src/schema/resolvers/users.ts @@ -113,32 +113,53 @@ export default { blockUser: async (object, args, context, resolveInfo) => { const { user: currentUser } = context if (currentUser.id === args.id) return null - await neode.cypher( - ` - MATCH(u:User {id: $currentUser.id})-[r:FOLLOWS]->(b:User {id: $args.id}) - DELETE r - `, - { currentUser, args }, - ) - const [user, blockedUser] = await Promise.all([ - neode.find('User', currentUser.id), - neode.find('User', args.id), - ]) - await user.relateTo(blockedUser, 'blocked') - return blockedUser.toJson() + + const session = context.driver.session() + const writeTxResultPromise = session.writeTransaction(async (transaction) => { + const unBlockUserTransactionResponse = await transaction.run( + ` + MATCH (blockedUser:User {id: $args.id}) + MATCH (currentUser:User {id: $currentUser.id}) + OPTIONAL MATCH (currentUser)-[r:FOLLOWS]->(blockedUser) + DELETE r + CREATE (currentUser)-[:BLOCKED]->(blockedUser) + RETURN blockedUser {.*} + `, + { currentUser, args }, + ) + return unBlockUserTransactionResponse.records.map((record) => record.get('blockedUser'))[0] + }) + try { + return await writeTxResultPromise + } catch (error) { + throw new UserInputError(error.message) + } finally { + session.close() + } }, unblockUser: async (object, args, context, resolveInfo) => { const { user: currentUser } = context if (currentUser.id === args.id) return null - await neode.cypher( - ` - MATCH(u:User {id: $currentUser.id})-[r:BLOCKED]->(b:User {id: $args.id}) - DELETE r - `, - { currentUser, args }, - ) - const blockedUser = await neode.find('User', args.id) - return blockedUser.toJson() + + const session = context.driver.session() + const writeTxResultPromise = session.writeTransaction(async (transaction) => { + const unBlockUserTransactionResponse = await transaction.run( + ` + MATCH(u:User {id: $currentUser.id})-[r:BLOCKED]->(blockedUser:User {id: $args.id}) + DELETE r + RETURN blockedUser {.*} + `, + { currentUser, args }, + ) + return unBlockUserTransactionResponse.records.map((record) => record.get('blockedUser'))[0] + }) + try { + return await writeTxResultPromise + } catch (error) { + throw new UserInputError(error.message) + } finally { + session.close() + } }, UpdateUser: async (_parent, params, context, _resolveInfo) => { const { avatar: avatarInput } = params