Get implementing 'reviewedByModerator' further

This commit is contained in:
Wolfgang Huß 2019-11-22 08:44:40 +01:00
parent c0fb53c2b5
commit a5689e2f67
6 changed files with 53 additions and 72 deletions

View File

@ -1,5 +1,6 @@
import uuid from 'uuid/v4'
import Resolver from './helpers/Resolver'
import { queryReviewedByModerator } from './helpers/claimResource.js'
export default {
Mutation: {
@ -69,37 +70,10 @@ export default {
hasOne: {
author: '<-[:WROTE]-(related:User)',
post: '-[:COMMENTS]->(related:Post)',
// 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) => {
// console.log('reviewedByModerator !!!')
// console.log('reviewedByModerator !!!')
// console.log('reviewedByModerator !!!')
// console.log('reviewedByModerator !!!')
// console.log('reviewedByModerator !!!')
// if (typeof parent.reviewedByModerator !== 'undefined') return parent.reviewedByModerator
// // const { id } = parent
// // const statement = `
// // MATCH (p:Post {id: $id})-[:TAGGED|CATEGORIZED]->(categoryOrTag)<-[:TAGGED|CATEGORIZED]-(post:Post)
// // WHERE NOT post.deleted AND NOT post.disabled
// // RETURN DISTINCT post
// // LIMIT 10
// // `
// // let reviewedByModerator
// // 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 reviewedByModerator
// return {
// id: 'Hallo !!!'
// }
// },
reviewedByModerator: async (parent, _params, context, _resolveInfo) => {
return await queryReviewedByModerator('Comment', parent, context)
},
},
}

View File

@ -0,0 +1,21 @@
export async function queryReviewedByModerator(label, parent, context) {
if (typeof parent.reviewedByModerator !== 'undefined') return parent.reviewedByModerator
const { id } = parent
const statement = `
MATCH (resource {id: $id})<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User)
WHERE $label IN labels(resource)
RETURN moderator
ORDER BY caseFolder.updatedAt DESC, review.updatedAt DESC
LIMIT 1
`
let reviewedByModerator
const session = context.driver.session()
try {
const result = await session.run(statement, { label, id })
const [firstElement] = result.records.map(r => r.get('moderator').properties)
reviewedByModerator = firstElement
} finally {
session.close()
}
return reviewedByModerator
}

View File

@ -5,6 +5,8 @@ import { getBlockedUsers, getBlockedByUsers } from './users.js'
import { mergeWith, isArray, isEmpty } from 'lodash'
import { UserInputError } from 'apollo-server'
import Resolver from './helpers/Resolver'
import { queryReviewedByModerator } from './helpers/claimResource.js'
const filterForBlockedUsers = async (params, context) => {
if (!context.user) return params
const [blockedUsers, blockedByUsers] = await Promise.all([
@ -340,25 +342,8 @@ 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
reviewedByModerator: async (parent, _params, context, _resolveInfo) => {
return await queryReviewedByModerator('Post', parent, context)
},
},
}

View File

@ -3,6 +3,7 @@ import fileUpload from './fileUpload'
import { neode } from '../../bootstrap/neo4j'
import { UserInputError, ForbiddenError } from 'apollo-server'
import Resolver from './helpers/Resolver'
import { queryReviewedByModerator } from './helpers/claimResource.js'
const instance = neode()
@ -200,9 +201,6 @@ export default {
},
hasOne: {
invitedBy: '<-[:INVITED]-(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: {
@ -217,5 +215,8 @@ export default {
badges: '<-[:REWARDED]-(related:Badge)',
},
}),
reviewedByModerator: async (parent, _params, context, _resolveInfo) => {
return await queryReviewedByModerator('User', parent, context)
},
},
}

View File

@ -19,16 +19,16 @@ type Comment {
# """
# )
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
"""
)
# Wolle @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
# """
# )
}
type Mutation {

View File

@ -43,16 +43,16 @@ type User {
# """
# )
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
"""
)
# Wolle @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
# """
# )
role: UserGroup!
publicKey: String
invitedBy: User @relation(name: "INVITED", direction: "IN")