changeset 1194:7db850de0952

Added a signer who makes the final decison on an import. Generate a log entry when the final decison is made.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 18 Nov 2018 18:29:25 +0100
parents 58acc343b1b6
children 486d66a9565c
files pkg/controllers/importqueue.go pkg/models/import.go schema/gemma.sql
diffstat 3 files changed, 28 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/importqueue.go	Fri Nov 16 18:35:09 2018 +0100
+++ b/pkg/controllers/importqueue.go	Sun Nov 18 18:29:25 2018 +0100
@@ -22,6 +22,7 @@
 	"strconv"
 	"strings"
 
+	"gemma.intevation.de/gemma/pkg/auth"
 	"gemma.intevation.de/gemma/pkg/imports"
 	"gemma.intevation.de/gemma/pkg/models"
 	"github.com/gorilla/mux"
@@ -35,7 +36,8 @@
   state::varchar,
   enqueued,
   kind,
-  username
+  username,
+  signer
 FROM waterway.imports
 `
 
@@ -167,6 +169,7 @@
 			&it.Enqueued,
 			&it.Kind,
 			&it.User,
+			&it.Signer,
 		); err != nil {
 			return
 		}
@@ -295,13 +298,18 @@
 SELECT state = 'pending'::waterway.import_state, kind WHERE id = $1`
 
 	reviewSQL = `
-UPDATE waterway.imports SET state = $1::waterway.import_state
-WHERE id = $2`
+UPDATE waterway.imports SET
+  state = $1::waterway.import_state,
+  signer = $2
+WHERE id = $3`
 
 	deleteImportDataSQL = `SELECT waterway.del_import($1)`
 
 	deleteImportTrackSQL = `
 DELETE FROM waterway.track_imports WHERE import_id = $1`
+
+	logDecisionSQL = `
+INSERT INTO waterway.import_logs (import_id, msg) VALUES ($1, $2)`
 )
 
 func reviewImport(
@@ -358,7 +366,16 @@
 		}
 	}
 
-	if _, err = tx.ExecContext(ctx, reviewSQL, state, id); err != nil {
+	// Log the decision and set the final state.
+	session, _ := auth.GetSession(req)
+	who := session.User
+
+	if _, err = tx.ExecContext(ctx, logDecisionSQL, id,
+		fmt.Sprintf("User '%s' %s import %d.", who, state, id)); err != nil {
+		return
+	}
+
+	if _, err = tx.ExecContext(ctx, reviewSQL, state, who, id); err != nil {
 		return
 	}
 
--- a/pkg/models/import.go	Fri Nov 16 18:35:09 2018 +0100
+++ b/pkg/models/import.go	Sun Nov 18 18:29:25 2018 +0100
@@ -27,6 +27,7 @@
 		Enqueued ImportTime `json:"enqueued"`
 		Kind     string     `json:"kind"`
 		User     string     `json:"user"`
+		Signer   string     `json:"signer,omitempty"`
 	}
 
 	ImportLogEntry struct {
--- a/schema/gemma.sql	Fri Nov 16 18:35:09 2018 +0100
+++ b/schema/gemma.sql	Sun Nov 18 18:29:25 2018 +0100
@@ -527,7 +527,12 @@
     kind  varchar NOT NULL,
     username varchar NOT NULL
         REFERENCES internal.user_profiles(username)
-            ON DELETE CASCADE ON UPDATE CASCADE,
+            ON DELETE CASCADE
+            ON UPDATE CASCADE,
+    signer varchar
+        REFERENCES internal.user_profiles(username)
+            ON DELETE SET NULL
+            ON UPDATE CASCADE,
     data TEXT
 );
 
@@ -574,6 +579,4 @@
 CREATE TRIGGER delete_import AFTER DELETE ON waterway.track_imports
    FOR EACH ROW EXECUTE PROCEDURE waterway.del_import();
 
-
-
 COMMIT;