diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index d46664c60..60558a056 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -12,29 +12,20 @@ export default { return neo4jgraphql(object, params, context, resolveInfo, false) }, DeleteUser: async (object, params, context, resolveInfo) => { - const { comments, posts } = params + const { resource } = params const session = context.driver.session() - if (comments) { - await session.run( - ` - MATCH (comments:Comment)<-[:WROTE]-(author:User {id: $userId}) - DETACH DELETE comments - RETURN author`, - { - userId: context.user.id, - }, - ) - } - if (posts) { - await session.run( - ` - MATCH (posts:Post)<-[:WROTE]-(author:User {id: $userId}) - DETACH DELETE posts - RETURN author`, - { - userId: context.user.id, - }, - ) + if (resource && resource.length) { + resource.forEach(async node => { + await session.run( + ` + MATCH (resource:${node})<-[:WROTE]-(author:User {id: $userId}) + DETACH DELETE resource + RETURN author`, + { + userId: context.user.id, + }, + ) + }) } session.close() return neo4jgraphql(object, params, context, resolveInfo, false) diff --git a/backend/src/schema/resolvers/users.spec.js b/backend/src/schema/resolvers/users.spec.js index a2b59c19d..06ccec5de 100644 --- a/backend/src/schema/resolvers/users.spec.js +++ b/backend/src/schema/resolvers/users.spec.js @@ -88,8 +88,8 @@ describe('users', () => { let deleteUserVariables let asAuthor const deleteUserMutation = gql` - mutation($id: ID!, $comments: Boolean, $posts: Boolean) { - DeleteUser(id: $id, comments: $comments, posts: $posts) { + mutation($id: ID!, $resource: [String]) { + DeleteUser(id: $id, resource: $resource) { id } } @@ -209,8 +209,18 @@ describe('users', () => { }) describe("deletes a user's", () => { + it('posts on request', async () => { + deleteUserVariables = { id: 'u343', resource: ['Post'] } + await client.request(deleteUserMutation, deleteUserVariables) + const postQueryVariablesByContent = { + content: 'Post by user u343', + } + const { Post } = await client.request(postQuery, postQueryVariablesByContent) + expect(Post).toEqual([]) + }) + it('comments on request', async () => { - deleteUserVariables = { id: 'u343', comments: true } + deleteUserVariables = { id: 'u343', resource: ['Comment'] } await client.request(deleteUserMutation, deleteUserVariables) const commentQueryVariablesByContent = { content: 'Comment by user u343', @@ -219,14 +229,19 @@ describe('users', () => { expect(Comment).toEqual([]) }) - it('posts on request', async () => { - deleteUserVariables = { id: 'u343', posts: true } + it('posts and comments on request', async () => { + deleteUserVariables = { id: 'u343', resource: ['Post', 'Comment'] } await client.request(deleteUserMutation, deleteUserVariables) const postQueryVariablesByContent = { content: 'Post by user u343', } + const commentQueryVariablesByContent = { + content: 'Comment by user u343', + } const { Post } = await client.request(postQuery, postQueryVariablesByContent) + const { Comment } = await client.request(commentQuery, commentQueryVariablesByContent) expect(Post).toEqual([]) + expect(Comment).toEqual([]) }) }) }) diff --git a/backend/src/schema/types/schema.gql b/backend/src/schema/types/schema.gql index 1b9517c52..2a8be9e09 100644 --- a/backend/src/schema/types/schema.gql +++ b/backend/src/schema/types/schema.gql @@ -38,7 +38,7 @@ type Mutation { follow(id: ID!, type: FollowTypeEnum): Boolean! # Unfollow the given Type and ID unfollow(id: ID!, type: FollowTypeEnum): Boolean! - DeleteUser(id: ID!, comments: Boolean, posts: Boolean): User + DeleteUser(id: ID!, resource: [String]): User } type Statistics {