From a67b74cae0a9abe280bcbbb14fe4a9a6c0cb2549 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 24 Sep 2020 17:24:27 +0200 Subject: [PATCH] backend for export user data --- .../src/middleware/permissionsMiddleware.js | 1 + backend/src/schema/resolvers/userData.js | 33 +++++++++++++++++++ backend/src/schema/types/type/UserData.gql | 10 ++++++ 3 files changed, 44 insertions(+) create mode 100644 backend/src/schema/resolvers/userData.js create mode 100644 backend/src/schema/types/type/UserData.gql diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js index 2c8d7ff63..f4f8c654b 100644 --- a/backend/src/middleware/permissionsMiddleware.js +++ b/backend/src/middleware/permissionsMiddleware.js @@ -105,6 +105,7 @@ export default shield( blockedUsers: isAuthenticated, notifications: isAuthenticated, Donations: isAuthenticated, + userData: isAuthenticated, }, Mutation: { '*': deny, diff --git a/backend/src/schema/resolvers/userData.js b/backend/src/schema/resolvers/userData.js new file mode 100644 index 000000000..98e0e700e --- /dev/null +++ b/backend/src/schema/resolvers/userData.js @@ -0,0 +1,33 @@ +import log from './helpers/databaseLogger' + +export default { + Query: { + userData: async (object, args, context, resolveInfo) => { + const id = context.user.id + const cypher = ` + MATCH (u:User { id: $id }) + WITH u AS user + MATCH (p:Post) + WHERE (p)<-[:COMMENTS]-(:Comment)<-[:WROTE]-(user) + OR (user)-[:WROTE]->(p) + RETURN { user: properties(user), posts: collect(properties(p)) } + AS result + ` + const session = context.driver.session() + const resultPromise = session.readTransaction(async (transaction) => { + const transactionResponse = transaction.run(cypher, { + id, + }) + return transactionResponse + }) + + try { + const result = await resultPromise + log(result.records[0].get('result')) + return result.records[0].get('result') + } finally { + session.close() + } + }, + }, +} diff --git a/backend/src/schema/types/type/UserData.gql b/backend/src/schema/types/type/UserData.gql new file mode 100644 index 000000000..60ad5c12f --- /dev/null +++ b/backend/src/schema/types/type/UserData.gql @@ -0,0 +1,10 @@ +type UserData { + user: User! + posts: [Post] +} + +type Query { + userData( + id: ID + ): UserData +}