diff --git a/backend/src/schema/resolvers/comments.js b/backend/src/schema/resolvers/comments.js index 4a3d4f1d1..476e64b1b 100644 --- a/backend/src/schema/resolvers/comments.js +++ b/backend/src/schema/resolvers/comments.js @@ -73,7 +73,7 @@ export default { }, }), reviewedByModerator: async (parent, _params, context, _resolveInfo) => { - return await queryReviewedByModerator('Comment', parent, context) + return queryReviewedByModerator('Comment', parent, context) }, }, } diff --git a/backend/src/schema/resolvers/helpers/claimResource.js b/backend/src/schema/resolvers/helpers/claimResource.js index 75e68afbe..22ec69f5f 100644 --- a/backend/src/schema/resolvers/helpers/claimResource.js +++ b/backend/src/schema/resolvers/helpers/claimResource.js @@ -13,7 +13,7 @@ export async function queryReviewedByModerator(label, parent, context) { try { const result = await session.run(statement, { label, id }) const [firstElement] = result.records.map(r => r.get('moderator').properties) - reviewedByModerator = firstElement + reviewedByModerator = firstElement } finally { session.close() } diff --git a/backend/src/schema/resolvers/moderation.js b/backend/src/schema/resolvers/moderation.js index 0debb80ea..c61b7f5fe 100644 --- a/backend/src/schema/resolvers/moderation.js +++ b/backend/src/schema/resolvers/moderation.js @@ -29,7 +29,9 @@ export default { // Wolle console.log('params: ', params) const { resourceId } = params // Wolle console.log('resourceId: ', resourceId) - const { disable, closed } = params + let { disable, closed } = params + disable = disable === undefined ? null : disable + closed = closed === undefined ? null : closed // Wolle console.log('disable: ', disable) const { user: moderator, driver } = context @@ -118,22 +120,38 @@ export default { MATCH (moderator:User {id: $moderatorId}) MATCH (resource {id: $resourceId}) WHERE resource:User OR resource:Post OR resource:Comment + // report exists? //WHERE (caseFolder)<-[report:REPORTED]-(submitter:User) // no open caseFolder, create one, update existing MERGE (resource)<-[:FLAGGED]-(caseFolder:CaseFolder {closed: false}) - ON CREATE SET caseFolder.id = randomUUID(), caseFolder.createdAt = $createdAt, caseFolder.updatedAt = caseFolder.createdAt, caseFolder.rule = 'latestReviewUpdatedAt', caseFolder.disable = $disable, caseFolder.closed = $closed - ON MATCH SET caseFolder.updatedAt = $createdAt, caseFolder.disable = $disable, caseFolder.closed = $closed + ON CREATE SET caseFolder.id = randomUUID(), caseFolder.createdAt = $dateTime, caseFolder.updatedAt = caseFolder.createdAt, caseFolder.rule = 'latestReviewUpdatedAtRules', caseFolder.disable = false, caseFolder.closed = false + ON MATCH SET caseFolder.updatedAt = $dateTime + // caseFolder.disable and caseFolder.closed are set after setting them in review // Create review on caseFolder WITH moderator, resource, caseFolder - CREATE (caseFolder)<-[review:REVIEWED {createdAt: $createdAt, updatedAt: $createdAt, disable: $disable, closed: $closed}]-(moderator) + MERGE (caseFolder)<-[review:REVIEWED]-(moderator) + ON CREATE SET review.createdAt = $dateTime, review.updatedAt = review.createdAt, + review.disable = CASE WHEN $disable IS NULL + THEN false + ELSE $disable END, + review.closed = CASE WHEN $closed IS NULL + THEN false + ELSE $closed END + ON MATCH SET + review.updatedAt = $dateTime, + review.disable = CASE WHEN $disable IS NULL + THEN review.disable + ELSE $disable END, + review.closed = CASE WHEN $closed IS NULL + THEN review.closed + ELSE $closed END - SET resource.disabled = $disable + SET caseFolder.disable = review.disable, caseFolder.closed = review.closed + SET resource.disabled = review.disable RETURN moderator, review, caseFolder {.id}, resource, labels(resource)[0] AS type - - //RETURN decision, resource, moderator, labels(resource)[0] AS type ` // Wolle console.log('cypher: ', cypher) @@ -159,7 +177,7 @@ export default { const mutateDecisionTransactionResponse = await txc.run(cypher, { resourceId, moderatorId: moderator.id, - createdAt: new Date().toISOString(), + dateTime: new Date().toISOString(), disable, closed, }) diff --git a/backend/src/schema/resolvers/posts.js b/backend/src/schema/resolvers/posts.js index 7875772c4..f26ecc0eb 100644 --- a/backend/src/schema/resolvers/posts.js +++ b/backend/src/schema/resolvers/posts.js @@ -343,7 +343,7 @@ export default { return relatedContributions }, reviewedByModerator: async (parent, _params, context, _resolveInfo) => { - return await queryReviewedByModerator('Post', parent, context) + return queryReviewedByModerator('Post', parent, context) }, }, } diff --git a/backend/src/schema/resolvers/reports.js b/backend/src/schema/resolvers/reports.js index 9eb3c2d12..c79fef847 100644 --- a/backend/src/schema/resolvers/reports.js +++ b/backend/src/schema/resolvers/reports.js @@ -15,7 +15,7 @@ export default { WHERE resource:User OR resource:Post OR resource:Comment // no open caseFolder, create one MERGE (resource)<-[:FLAGGED]-(caseFolder:CaseFolder {closed: false}) - ON CREATE SET caseFolder.id = randomUUID(), caseFolder.createdAt = $createdAt, caseFolder.updatedAt = caseFolder.createdAt, caseFolder.rule = 'latestReviewUpdatedAt', caseFolder.disable = false, caseFolder.closed = false + ON CREATE SET caseFolder.id = randomUUID(), caseFolder.createdAt = $createdAt, caseFolder.updatedAt = caseFolder.createdAt, caseFolder.rule = 'latestReviewUpdatedAtRules', caseFolder.disable = false, caseFolder.closed = false // Create report on caseFolder WITH submitter, resource, caseFolder CREATE (caseFolder)<-[report:REPORTED {createdAt: $createdAt, reasonCategory: $reasonCategory, reasonDescription: $reasonDescription}]-(submitter) diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index d985a1382..2a43a215f 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -216,7 +216,7 @@ export default { }, }), reviewedByModerator: async (parent, _params, context, _resolveInfo) => { - return await queryReviewedByModerator('User', parent, context) + return queryReviewedByModerator('User', parent, context) }, }, } diff --git a/backend/src/schema/types/type/CaseFolder.gql b/backend/src/schema/types/type/CaseFolder.gql index 44e9d3664..ad664302c 100644 --- a/backend/src/schema/types/type/CaseFolder.gql +++ b/backend/src/schema/types/type/CaseFolder.gql @@ -10,5 +10,5 @@ type CaseFolder { } enum CaseRule { - latestReviewUpdatedAt + latestReviewUpdatedAtRules } diff --git a/backend/src/schema/types/type/Comment.gql b/backend/src/schema/types/type/Comment.gql index bc9d6ae69..dc92c1f9b 100644 --- a/backend/src/schema/types/type/Comment.gql +++ b/backend/src/schema/types/type/Comment.gql @@ -9,26 +9,15 @@ type Comment { updatedAt: 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 - # 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 - # """ - # ) + @cypher( + statement: """ + MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) + RETURN moderator + ORDER BY caseFolder.updatedAt DESC, review.updatedAt DESC + LIMIT 1 + """ + ) } type Mutation { diff --git a/backend/src/schema/types/type/Post.gql b/backend/src/schema/types/type/Post.gql index 915a0ea72..307312900 100644 --- a/backend/src/schema/types/type/Post.gql +++ b/backend/src/schema/types/type/Post.gql @@ -122,25 +122,14 @@ 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 - # """ - # ) - # 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 - # """ - # ) + @cypher( + statement: """ + MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) + RETURN moderator + ORDER BY caseFolder.updatedAt DESC, review.updatedAt DESC + LIMIT 1 + """ + ) 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 77a77616f..47635eeb1 100644 --- a/backend/src/schema/types/type/User.gql +++ b/backend/src/schema/types/type/User.gql @@ -33,26 +33,15 @@ 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 - # 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 - # """ - # ) + @cypher( + statement: """ + MATCH (this)<-[:FLAGGED]-(caseFolder:CaseFolder)<-[review:REVIEWED]-(moderator:User) + RETURN moderator + ORDER BY caseFolder.updatedAt DESC, review.updatedAt DESC + LIMIT 1 + """ + ) role: UserGroup! publicKey: String invitedBy: User @relation(name: "INVITED", direction: "IN") @@ -63,8 +52,6 @@ type User { about: String socialMedia: [SocialMedia]! @relation(name: "OWNED_BY", direction: "IN") - # createdAt: DateTime - # updatedAt: DateTime createdAt: String updatedAt: String diff --git a/neo4j/change_disabled_relationship_to_case_node.sh b/neo4j/change_disabled_relationship_to_case_node.sh index ef7474aa4..7671825fc 100755 --- a/neo4j/change_disabled_relationship_to_case_node.sh +++ b/neo4j/change_disabled_relationship_to_case_node.sh @@ -22,7 +22,7 @@ WHERE disabledResource:User OR disabledResource:Comment OR disabledResource:Post DELETE disabled CREATE (moderator)-[review:REVIEWED]->(caseFolder:CaseFolder)-[:FLAGGED]->(disabledResource) SET review.createdAt = toString(datetime()), review.updatedAt = review.createdAt, review.disable = true -SET caseFolder.id = randomUUID(), caseFolder.createdAt = toString(datetime()), caseFolder.updatedAt = caseFolder.createdAt, caseFolder.rule = 'latestReviewUpdatedAt', caseFolder.disable = true, caseFolder.closed = false +SET caseFolder.id = randomUUID(), caseFolder.createdAt = toString(datetime()), caseFolder.updatedAt = caseFolder.createdAt, caseFolder.rule = 'latestReviewUpdatedAtRules', caseFolder.disable = true, caseFolder.closed = false // if disabledResource has no report, then create a moderators default report WITH moderator, disabledResource, caseFolder @@ -45,7 +45,7 @@ echo " MATCH (reporter:User)-[oldReport:REPORTED]->(notDisabledResource) WHERE notDisabledResource:User OR notDisabledResource:Comment OR notDisabledResource:Post MERGE (caseFolder:CaseFolder)-[:FLAGGED]->(notDisabledResource) -ON CREATE SET caseFolder.id = randomUUID(), caseFolder.createdAt = toString(datetime()), caseFolder.updatedAt = caseFolder.createdAt, caseFolder.rule = 'latestReviewUpdatedAt', caseFolder.disable = false, caseFolder.closed = false +ON CREATE SET caseFolder.id = randomUUID(), caseFolder.createdAt = toString(datetime()), caseFolder.updatedAt = caseFolder.createdAt, caseFolder.rule = 'latestReviewUpdatedAtRules', caseFolder.disable = false, caseFolder.closed = false CREATE (reporter)-[report:REPORTED]->(caseFolder) SET report = oldReport DELETE oldReport