diff --git a/backend/src/schema/index.js b/backend/src/schema/index.js index 9f5fbc2b7..d1ff7ada0 100644 --- a/backend/src/schema/index.js +++ b/backend/src/schema/index.js @@ -20,6 +20,7 @@ export default makeAugmentedSchema({ 'NOTIFIED', 'REPORTED', 'REVIEWED', + 'CaseFolder', 'Donations', ], }, diff --git a/backend/src/schema/resolvers/comments.js b/backend/src/schema/resolvers/comments.js index b11d78301..13d06506e 100644 --- a/backend/src/schema/resolvers/comments.js +++ b/backend/src/schema/resolvers/comments.js @@ -69,7 +69,9 @@ export default { hasOne: { author: '<-[:WROTE]-(related:User)', post: '-[:COMMENTS]->(related:Post)', - // Wolle reviewedByModerator: '<-[:DECIDED]-(related:User)', + // Wolle !!! Following statement is not correct, but the correct (see file 'backend/src/schema/types/type/Comment.gql') makes an error. Should be: '<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(related:User) RETURN related ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC LIMIT 1' + // Wolle reviewedByModerator: '<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(related:User)', + reviewedByModerator: '<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(related:User) WITH caseFolder, review, related ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC WITH collect(related) AS orderedRelated WITH orderedRelated[0] AS related', }, }), // Wolle reviewedByModerator: async (parent, params, context, resolveInfo) => { diff --git a/backend/src/schema/resolvers/moderation.js b/backend/src/schema/resolvers/moderation.js index a691fd477..0debb80ea 100644 --- a/backend/src/schema/resolvers/moderation.js +++ b/backend/src/schema/resolvers/moderation.js @@ -1,7 +1,6 @@ -import uuid from 'uuid/v4' -import { undefinedToNullResolver } from './helpers/Resolver' +// Wolle import { undefinedToNullResolver } from './helpers/Resolver' -// const queryOpenDecisionWriteTransaction = (session, resourceId) => { +// Wolle const queryOpenDecisionWriteTransaction = (session, resourceId) => { // return session.writeTransaction(async txc => { // const queryOpenDecisionTransactionResponse = await txc.run( // ` diff --git a/backend/src/schema/resolvers/posts.js b/backend/src/schema/resolvers/posts.js index b435a0d18..b4eeac489 100644 --- a/backend/src/schema/resolvers/posts.js +++ b/backend/src/schema/resolvers/posts.js @@ -307,7 +307,6 @@ export default { }, hasOne: { author: '<-[:WROTE]-(related:User)', - // Wolle reviewedByModerator: '<-[:DECIDED]-(related:User)', pinnedBy: '<-[:PINNED]-(related:User)', }, count: { @@ -341,5 +340,25 @@ export default { } return relatedContributions }, + reviewedByModerator: async (parent, params, context, resolveInfo) => { + if (typeof parent.reviewedByModerator !== 'undefined') return parent.reviewedByModerator + const { id } = parent + const statement = ` + MATCH (p:Post {id: $id})<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) + RETURN moderator + ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC + LIMIT 1 + ` + let reviewedByModerator + const session = context.driver.session() + try { + const result = await session.run(statement, { id }) + const [firstElement] = result.records.map(r => r.get('moderator').properties) + reviewedByModerator = firstElement + } finally { + session.close() + } + return reviewedByModerator + }, }, } diff --git a/backend/src/schema/resolvers/reports.js b/backend/src/schema/resolvers/reports.js index fca881d51..9eb3c2d12 100644 --- a/backend/src/schema/resolvers/reports.js +++ b/backend/src/schema/resolvers/reports.js @@ -1,4 +1,4 @@ -import { undefinedToNullResolver } from './helpers/Resolver' +// Wolle import { undefinedToNullResolver } from './helpers/Resolver' export default { Mutation: { diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index ba30afbc6..0fe77c88d 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -200,7 +200,9 @@ export default { }, hasOne: { invitedBy: '<-[:INVITED]-(related:User)', - // Wolle reviewedByModerator: '<-[:DECIDED]-(related:User)', + // Wolle !!! Following statement is not correct, but the correct (see file 'backend/src/schema/types/type/User.gql') makes an error. Should be: '<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(related:User) RETURN related ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC LIMIT 1' + // Wolle reviewedByModerator: '<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(related:User)', + reviewedByModerator: '<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderators:User) WITH caseFolder, review, moderators ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC WITH collect(moderators) AS orderedModerators WITH orderedModerators AS related', location: '-[:IS_IN]->(related:Location)', }, hasMany: { diff --git a/backend/src/schema/types/type/Comment.gql b/backend/src/schema/types/type/Comment.gql index 8c1b8aa58..347b7fc20 100644 --- a/backend/src/schema/types/type/Comment.gql +++ b/backend/src/schema/types/type/Comment.gql @@ -1,41 +1,3 @@ -enum _CommentOrdering { - id_asc - id_desc - content_asc - content_desc - createdAt_asc - createdAt_desc - updatedAt_asc - updatedAt_desc -} - -input _CommentFilter { - AND: [_CommentFilter!] - OR: [_CommentFilter!] - id: ID - id_not: ID - id_in: [ID!] - id_not_in: [ID!] - author: _UserFilter - author_not: _UserFilter - author_in: [_UserFilter!] - author_not_in: [_UserFilter!] - content: String - content_not: String - content_in: [String!] - content_not_in: [String!] - content_contains: String - content_not_contains: String - content_starts_with: String - content_not_starts_with: String - content_ends_with: String - content_not_ends_with: String - post: _PostFilter - post_not: _PostFilter - post_in: [_PostFilter!] - post_not_in: [_PostFilter!] -} - type Comment { id: ID! activityId: String @@ -47,31 +9,28 @@ type Comment { updatedAt: String deleted: Boolean disabled: Boolean - # Wolle reviewedByModerator: User # Wolle @relation(name: "DECIDED", direction: "IN") + # Wolle reviewedByModerator: User + # @cypher( + # statement: """ + # MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) + # RETURN moderator + # ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC + # LIMIT 1 + # """ + # ) reviewedByModerator: User @cypher( statement: """ - MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) - RETURN moderator + MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderators:User) + WITH caseFolder, review, moderators ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC - LIMIT 1 + WITH collect(moderators) AS orderedModerators + WITH orderedModerators[0] AS moderator + RETURN moderator """ ) } -type Query { - Comment( - id: ID - content: String - createdAt: String - updatedAt: String - first: Int - offset: Int - orderBy: [_CommentOrdering] - filter: _CommentFilter - ): [Comment] -} - type Mutation { CreateComment( id: ID diff --git a/backend/src/schema/types/type/Post.gql b/backend/src/schema/types/type/Post.gql index 6e74ba8dd..915a0ea72 100644 --- a/backend/src/schema/types/type/Post.gql +++ b/backend/src/schema/types/type/Post.gql @@ -122,14 +122,25 @@ type Post { deleted: Boolean disabled: Boolean reviewedByModerator: User - @cypher( - statement: """ - MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) - RETURN moderator - ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC - LIMIT 1 - """ - ) + # @cypher( + # statement: """ + # MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) + # RETURN moderator + # ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC + # LIMIT 1 + # """ + # ) + # reviewedByModerator: User + # @cypher( + # statement: """ + # MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderators:User) + # WITH caseFolder, review, moderators + # ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC + # WITH collect(moderators) AS orderedModerators + # WITH orderedModerators[0] AS moderator + # RETURN moderator + # """ + # ) pinned: Boolean createdAt: String updatedAt: String diff --git a/backend/src/schema/types/type/User.gql b/backend/src/schema/types/type/User.gql index 115aa9544..576bb2ebb 100644 --- a/backend/src/schema/types/type/User.gql +++ b/backend/src/schema/types/type/User.gql @@ -33,13 +33,24 @@ type User { coverImg: String deleted: Boolean disabled: Boolean + # Wolle reviewedByModerator: User + # @cypher( + # statement: """ + # MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) + # RETURN moderator + # ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC + # LIMIT 1 + # """ + # ) reviewedByModerator: User @cypher( statement: """ - MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) - RETURN moderator + MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderators:User) + WITH caseFolder, review, moderators ORDER BY caseFolder.updatedAt ASC, review.updatedAt ASC - LIMIT 1 + WITH collect(moderators) AS orderedModerators + WITH orderedModerators[0] AS moderator + RETURN moderator """ ) role: UserGroup!