[FEAT] Invitation through Shared node
[gargantext.git] / src / Gargantext / Database / Admin / Trigger / Nodes.hs
index cc8edb580d9687072383593dfa7bbd4af89f7bdd..11644e304cd0e8550784a6fb7de928943a57870e 100644 (file)
@@ -16,6 +16,7 @@ Triggers on Nodes table.
 module Gargantext.Database.Admin.Trigger.Nodes
   where
 
+import Data.Text (Text)
 import Database.PostgreSQL.Simple.SqlQQ (sql)
 import qualified Database.PostgreSQL.Simple as DPS
 
@@ -67,3 +68,52 @@ triggerSearchUpdate = execPGSQuery query ( nodeTypeId NodeDocument
 
   |]
 
+type Secret = Text
+
+triggerUpdateHash :: Secret -> Cmd err Int64
+triggerUpdateHash secret = execPGSQuery query ( nodeTypeId NodeDocument
+                                              , nodeTypeId NodeContact
+                                              , secret
+                                              , secret
+                                              , nodeTypeId NodeDocument
+                                              , nodeTypeId NodeContact
+                                              , secret
+                                              , secret
+                                              )
+  where
+    query :: DPS.Query
+    query = [sql|
+
+      CREATE OR REPLACE FUNCTION hash_insert_nodes()
+      RETURNS trigger AS $$
+      BEGIN
+       IF NEW.hash_id = ''
+         THEN
+           IF NEW.typename = ? OR NEW.typename = ?
+             THEN NEW.hash_id = digest(CONCAT(?, NEW.typename, NEW.name, NEW.parent_id, NEW.hyperdata), 'sha256');
+             ELSE NEW.hash_id = digest(CONCAT(?, NEW.typename, NEW.name, NEW.id, NEW.hyperdata), 'sha256');
+           END IF;
+        END IF;
+        RETURN NEW;
+      END
+      $$ LANGUAGE plpgsql;
+
+
+      CREATE OR REPLACE FUNCTION hash_update_nodes()
+      RETURNS trigger AS $$
+      BEGIN
+        IF NEW.typename = ? OR NEW.typename = ?
+             THEN NEW.hash_id = digest(CONCAT(?, NEW.typename, NEW.name, NEW.parent_id, NEW.hyperdata), 'sha256');
+             ELSE NEW.hash_id = digest(CONCAT(?, NEW.typename, NEW.name, NEW.id, NEW.hyperdata), 'sha256');
+        END IF;
+        RETURN NEW;
+      END
+      $$ LANGUAGE plpgsql;
+
+
+      CREATE TRIGGER nodes_hash_insert BEFORE INSERT ON nodes FOR EACH ROW EXECUTE PROCEDURE hash_insert_nodes();
+      CREATE TRIGGER nodes_hash_update BEFORE UPDATE ON nodes FOR EACH ROW EXECUTE PROCEDURE hash_update_nodes();
+
+  |]
+
+