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 +}