From bf6e7a8131c2453b236531914f8206982a11b98a Mon Sep 17 00:00:00 2001 From: roschaefer Date: Thu, 29 Aug 2019 22:55:49 +0200 Subject: [PATCH] Implement fallback resolvers for Post and Comment --- backend/src/schema/resolvers/comments.js | 10 ++++++ backend/src/schema/resolvers/posts.js | 43 ++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/backend/src/schema/resolvers/comments.js b/backend/src/schema/resolvers/comments.js index 89a2040f4..c8fb8db3f 100644 --- a/backend/src/schema/resolvers/comments.js +++ b/backend/src/schema/resolvers/comments.js @@ -1,4 +1,5 @@ import { neo4jgraphql } from 'neo4j-graphql-js' +import Resolver from './helpers/Resolver' export default { Mutation: { @@ -52,4 +53,13 @@ export default { return comment }, }, + Comment: { + ...Resolver('Comment', { + hasOne: { + author: '<-[:WROTE]-(related:User)', + post: '-[:COMMENTS]->(related:Post)', + disabledBy: '<-[:DISABLED]-(related:User)', + }, + }), + }, } diff --git a/backend/src/schema/resolvers/posts.js b/backend/src/schema/resolvers/posts.js index a265c28f0..f9e4f0718 100644 --- a/backend/src/schema/resolvers/posts.js +++ b/backend/src/schema/resolvers/posts.js @@ -3,6 +3,7 @@ import { neo4jgraphql } from 'neo4j-graphql-js' import fileUpload from './fileUpload' import { getBlockedUsers, getBlockedByUsers } from './users.js' import { mergeWith, isArray } from 'lodash' +import Resolver from './helpers/Resolver' const filterForBlockedUsers = async (params, context) => { if (!context.user) return params @@ -181,4 +182,46 @@ export default { return emoted }, }, + Post: { + ...Resolver('Post', { + hasMany: { + tags: '-[:TAGGED]->(related:Tag)', + categories: '-[:CATEGORIZED]->(related:Category)', + comments: '<-[:COMMENTS]-(related:Comment)', + shoutedBy: '<-[:SHOUTED]-(related:User)', + emotions: '<-[related:EMOTED]', + }, + hasOne: { + author: '<-[:WROTE]-(related:User)', + disabledBy: '<-[:DISABLED]-(related:User)', + }, + count: { + shoutedCount: + '<-[:SHOUTED]-(related:User) WHERE NOT related.deleted = true AND NOT related.disabled = true', + emotionsCount: '<-[related:EMOTED]-(:User)', + }, + boolean: { + shoutedByCurrentUser: + '<-[:SHOUTED]-(u:User {id: $cypherParams.currentUserId}) RETURN COUNT(u) >= 1', + }, + }), + relatedContributions: async (parent, params, context, resolveInfo) => { + if (typeof parent.relatedContributions !== 'undefined') return parent.relatedContributions + const { id } = parent + const statement = ` + MATCH (p:Post {id: $id})-[:TAGGED|CATEGORIZED]->(categoryOrTag)<-[:TAGGED|CATEGORIZED]-(post:Post) + RETURN DISTINCT post + LIMIT 10 + ` + let relatedContributions + const session = context.driver.session() + try { + const result = await session.run(statement, { id }) + relatedContributions = result.records.map(r => r.get('post').properties) + } finally { + session.close() + } + return relatedContributions + }, + }, }