From a924357a13d270dc7723558f2eba5f4a3f30caae Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 5 Oct 2022 13:10:18 +0200 Subject: [PATCH] fix cypher when posts do not exist --- backend/src/schema/resolvers/groups.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/backend/src/schema/resolvers/groups.js b/backend/src/schema/resolvers/groups.js index a014449b8..259a7c818 100644 --- a/backend/src/schema/resolvers/groups.js +++ b/backend/src/schema/resolvers/groups.js @@ -260,9 +260,10 @@ export default { const writeTxResultPromise = session.writeTransaction(async (transaction) => { const leaveGroupCypher = ` MATCH (member:User {id: $userId})-[membership:MEMBER_OF]->(group:Group {id: $groupId}) - OPTIONAL MATCH (post:Post)-[:IN]->(group) - MERGE (member)-[:CANNOT_SEE]->(post) DELETE membership + WITH member, group + FOREACH (post IN [(p:Post)-[:IN]->(group) | p] | + MERGE (member)-[:CANNOT_SEE]->(post)) RETURN member {.*, myRoleInGroup: NULL} ` @@ -285,18 +286,20 @@ export default { let postRestrictionCypher = '' if (['owner', 'admin', 'usual'].includes(roleInGroup)) { postRestrictionCypher = ` - OPTIONAL MATCH (member)-[restriction:CANNOT_SEE]->(post:Post)-[:IN]->(group) - DELETE restriction` + WITH group, member, membership + FOREACH (restriction IN [(member)-[r:CANNOT_SEE]->(:Post)-[:IN]->(group) | r] | + DELETE restriction)` } else { // user becomes pending member postRestrictionCypher = ` - OPTIONAL MATCH (post:Post)-[:IN]->(group) - MERGE (member)-[:CANNOT_SEE]->(post)` + WITH group, member, membership + FOREACH (post IN [(p:Post)-[:IN]->(group) | p] | + MERGE (member)-[:CANNOT_SEE]->(post))` } const joinGroupCypher = ` - MATCH (member:User {id: $userId}), (group:Group {id: $groupId}) - ${postRestrictionCypher} + MATCH (member:User {id: $userId}) + MATCH (group:Group {id: $groupId}) MERGE (member)-[membership:MEMBER_OF]->(group) ON CREATE SET membership.createdAt = toString(datetime()), @@ -305,6 +308,7 @@ export default { ON MATCH SET membership.updatedAt = toString(datetime()), membership.role = $roleInGroup + ${postRestrictionCypher} RETURN member {.*, myRoleInGroup: membership.role} `