Extended decide mutation to close reports on close decision, first step

- Give REPORTED a 'closed' and 'decisionUuid' property.
- Give DECIDED a 'uuid' property.
This commit is contained in:
Wolfgang Huß 2019-11-06 17:15:47 +01:00
parent 35b802bf82
commit 465314eda9

View File

@ -1,3 +1,5 @@
import uuid from 'uuid/v4'
export default {
Mutation: {
decide: async (_object, params, context, _resolveInfo) => {
@ -36,17 +38,17 @@ export default {
if (disable === undefined) disable = false // default for creation
if (closed === undefined) closed = false // default for creation
cypherHeader = `
MATCH (moderator:User {id: $moderatorId})
MATCH (resource {id: $resourceId})
WHERE resource:User OR resource:Comment OR resource:Post
CREATE (resource)<-[decision:DECIDED]-(moderator)
SET decision.last = true
WITH decision, resource, moderator
OPTIONAL MATCH (:User)-[lastDecision:DECIDED {last: true}]->(resource)
SET (
CASE
WHEN lastDecision IS NOT NULL
THEN lastDecision END).last = false
MATCH (moderator:User {id: $moderatorId})
MATCH (resource {id: $resourceId})
WHERE resource:User OR resource:Comment OR resource:Post
CREATE (resource)<-[decision:DECIDED]-(moderator)
SET decision.last = true
WITH decision, resource, moderator
OPTIONAL MATCH (:User)-[lastDecision:DECIDED {last: true}]->(resource)
SET (
CASE
WHEN lastDecision IS NOT NULL
THEN lastDecision END).last = false
`
} else {
// an open decision …
@ -56,23 +58,33 @@ export default {
if (moderator.id !== existingDecisionTxResult.decisionModerator.id) {
// an open decision from different moderator, then change relation and properties
cypherHeader = `
MATCH (moderator:User)-[oldDecision:DECIDED {closed: false}]->(resource {id: $resourceId})
WHERE resource:User OR resource:Comment OR resource:Post
DELETE oldDecision
MATCH (moderator:User {id: $moderatorId})
MATCH (resource {id: $resourceId})
WHERE resource:User OR resource:Comment OR resource:Post
CREATE (resource)<-[decision:DECIDED]-(moderator)
SET decision = oldDecision
MATCH (moderator:User)-[oldDecision:DECIDED {closed: false}]->(resource {id: $resourceId})
WHERE resource:User OR resource:Comment OR resource:Post
DELETE oldDecision
MATCH (moderator:User {id: $moderatorId})
MATCH (resource {id: $resourceId})
WHERE resource:User OR resource:Comment OR resource:Post
CREATE (resource)<-[decision:DECIDED]-(moderator)
SET decision = oldDecision
`
} else {
// an open decision from same moderator, then change properties
cypherHeader = `
MATCH (moderator:User)-[decision:DECIDED {closed: false}]->(resource {id: $resourceId})
WHERE resource:User OR resource:Comment OR resource:Post
MATCH (moderator:User)-[decision:DECIDED {closed: false}]->(resource {id: $resourceId})
WHERE resource:User OR resource:Comment OR resource:Post
`
}
}
let decisionUUID = null
let cypherClosed = ''
// if (closed) {
// decisionUUID = uuid()
// cypherClosed = `
// OPTIONAL MATCH (:User)-[report:REPORTED {closed: false}]->(resource)
// SET report.closed = true, report.decisionUuid = $decisionUUID
// SET decision.uuid = $decisionUUID
// `
// }
const cypher =
cypherHeader +
`SET (
@ -85,7 +97,9 @@ export default {
THEN decision END).createdAt = toString(datetime())
SET decision.disable = $disable, decision.closed = $closed
SET resource.disabled = $disable
RETURN decision, resource, moderator, labels(resource)[0] AS type
` +
cypherClosed +
`RETURN decision, resource, moderator, labels(resource)[0] AS type
`
// Wolle console.log('cypher: ', cypher)
// console.log('disable: ', disable)
@ -96,6 +110,7 @@ export default {
moderatorId: moderator.id,
disable,
closed,
decisionUUID,
})
return decisionRelationshipTransactionResponse.records.map(record => ({
decision: record.get('decision'),