No new review if a reviewer changes their opinion

This commit is contained in:
Wolfgang Huß 2019-11-22 10:27:43 +01:00
parent eaafac30c7
commit a7aaee98c1
11 changed files with 58 additions and 75 deletions

View File

@ -73,7 +73,7 @@ export default {
},
}),
reviewedByModerator: async (parent, _params, context, _resolveInfo) => {
return await queryReviewedByModerator('Comment', parent, context)
return queryReviewedByModerator('Comment', parent, context)
},
},
}

View File

@ -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()
}

View File

@ -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,
})

View File

@ -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)
},
},
}

View File

@ -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)

View File

@ -216,7 +216,7 @@ export default {
},
}),
reviewedByModerator: async (parent, _params, context, _resolveInfo) => {
return await queryReviewedByModerator('User', parent, context)
return queryReviewedByModerator('User', parent, context)
},
},
}

View File

@ -10,5 +10,5 @@ type CaseFolder {
}
enum CaseRule {
latestReviewUpdatedAt
latestReviewUpdatedAtRules
}

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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