Bläddra i källkod

Add a new relationship to save the admin that banned the nodes

poeti8 6 år sedan
förälder
incheckning
6bfd6700be
2 ändrade filer med 16 tillägg och 8 borttagningar
  1. 2 1
      server/controllers/urlController.js
  2. 14 7
      server/db/url.js

+ 2 - 1
server/controllers/urlController.js

@@ -319,7 +319,7 @@ exports.reportUrl = async ({ body: { url } }, res) => {
   return res.status(400).json({ error: "Couldn't submit the report. Try again later." });
 };
 
-exports.ban = async ({ body }, res) => {
+exports.ban = async ({ body, user }, res) => {
   if (!body.id) return res.status(400).json({ error: 'No id has been provided.' });
 
   const urls = await findUrl({ id: body.id });
@@ -344,6 +344,7 @@ exports.ban = async ({ body }, res) => {
   }
 
   await banUrl({
+    adminEmail: user.email,
     domain: body.domain && domain,
     host,
     id: body.id,

+ 14 - 7
server/db/url.js

@@ -447,22 +447,29 @@ exports.urlCountFromDate = ({ date, email }) =>
       .catch(err => reject(err));
   });
 
-exports.banUrl = async ({ id, domain, host, user }) => {
+exports.banUrl = async ({ adminEmail, id, domain, host, user }) => {
   const session = driver.session();
   const userQuery = user
-    ? 'OPTIONAL MATCH (u:USER)-[:CREATED]->(l) SET u.banned = true WITH u ' +
-      'OPTIONAL MATCH (u)-[:CREATED]->(ls:URL) SET ls.banned = true'
+    ? 'OPTIONAL MATCH (u:USER)-[:CREATED]->(l) SET u.banned = true WITH a, u ' +
+      'OPTIONAL MATCH (u)-[:CREATED]->(ls:URL) SET ls.banned = true WITH a, u, ls ' +
+      'WHERE u.email IS NOT NULL MERGE (a)-[:BANNED]->(u) MERGE (a)-[:BANNED]->(ls) '
     : '';
   const domainQuery = domain
-    ? 'MERGE (d:DOMAIN { name: $domain }) ON CREATE SET d.banned = true'
+    ? 'MERGE (d:DOMAIN { name: $domain }) ON CREATE SET d.banned = true WITH a, d ' +
+      'WHERE d.name IS NOT NULL MERGE (a)-[:BANNED]->(d)'
+    : '';
+  const hostQuery = host
+    ? 'MERGE (h:HOST { name: $host }) ON CREATE SET h.banned = true WITH a, h ' +
+      'WHERE h.name IS NOT NULL MERGE (a)-[:BANNED]->(h)'
     : '';
-  const hostQuery = host ? 'MERGE (h:HOST { name: $host }) ON CREATE SET h.banned = true' : '';
-  const withL = user || domain || host ? 'WITH l' : '';
   await session.writeTransaction(tx =>
     tx.run(
       'MATCH (l:URL { id: $id }) WHERE NOT (l)-[:USES]->(:DOMAIN) ' +
-        `SET l.banned = true ${withL} ${userQuery} ${domainQuery} ${hostQuery}`,
+        'MATCH (a:USER) WHERE a.email = $adminEmail ' +
+        'SET l.banned = true WITH l, a MERGE (a)-[:BANNED]->(l) WITH l, a ' +
+        `${userQuery} ${domainQuery} ${hostQuery}`,
       {
+        adminEmail,
         id,
         domain,
         host,