changeset 1657:c354631e0018

Import queue: Moved email notification stuff to separate file.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 21 Dec 2018 10:33:49 +0100
parents 6dfad1ad59c8
children 07f996b0e14a
files pkg/imports/email.go pkg/imports/queue.go
diffstat 2 files changed, 91 insertions(+), 67 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/imports/email.go	Fri Dec 21 10:33:49 2018 +0100
@@ -0,0 +1,91 @@
+// This is Free Software under GNU Affero General Public License v >= 3.0
+// without warranty, see README.md and license for details.
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// License-Filename: LICENSES/AGPL-3.0.txt
+//
+// Copyright (C) 2018 by via donau
+//   – Österreichische Wasserstraßen-Gesellschaft mbH
+// Software engineering by Intevation GmbH
+//
+// Author(s):
+//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+package imports
+
+import (
+	"context"
+	"database/sql"
+	"log"
+	"strings"
+	"text/template"
+
+	"gemma.intevation.de/gemma/pkg/auth"
+	"gemma.intevation.de/gemma/pkg/config"
+	"gemma.intevation.de/gemma/pkg/misc"
+)
+
+const (
+	selectEmailSQL = `SELECT email_address FROM users.list_users WHERE username = $1`
+
+	importNotificationMailSubject = `import notification mail`
+)
+
+var (
+	importNotificationMailTmpl = template.Must(
+		template.New("notification").Parse(`Dear {{ .User }},
+
+a {{ .Description }} import on server {{ .Server }} triggered
+this email notification.
+
+{{ if eq .State "accepted" }}The imported data were successfully integrated into the database.{{ end -}}
+{{ if eq .State "failed" }}The import failed for some reasons.{{ end -}}
+{{ if eq .State "pending" }}The imported data could be integrated into the database
+but your final decision is needed.{{ end }}
+
+Please follow this link to have a closer look at the details:
+
+{{ .Server }}/#/?{{ if eq .State "pending" }}review{{ else }}importlog{{ end }}={{ .ID }}
+
+Best regards
+    Your service team`))
+)
+
+func sendNotificationMail(user, description, state string, id int64) {
+	config.WaitReady()
+
+	ctx := context.Background()
+	var email string
+	if err := auth.RunAs(ctx, user,
+		func(conn *sql.Conn) error {
+			return conn.QueryRowContext(ctx, selectEmailSQL, user).Scan(&email)
+		},
+	); err != nil {
+		log.Printf("error: %v\n", err)
+		return
+	}
+
+	data := struct {
+		User        string
+		Description string
+		Server      string
+		State       string
+		ID          int64
+	}{
+		User:        user,
+		Description: description,
+		Server:      config.ExternalURL(),
+		State:       state,
+		ID:          id,
+	}
+
+	var body strings.Builder
+	if err := importNotificationMailTmpl.Execute(&body, &data); err != nil {
+		log.Printf("error: %v\n", err)
+		return
+	}
+
+	if err := misc.SendMail(email, importNotificationMailSubject, body.String()); err != nil {
+		log.Printf("error: %v\n", err)
+	}
+}
--- a/pkg/imports/queue.go	Fri Dec 21 10:25:15 2018 +0100
+++ b/pkg/imports/queue.go	Fri Dec 21 10:33:49 2018 +0100
@@ -18,7 +18,6 @@
 	"database/sql"
 	"encoding/json"
 	"fmt"
-	"html/template"
 	"log"
 	"runtime/debug"
 	"strings"
@@ -29,7 +28,6 @@
 
 	"gemma.intevation.de/gemma/pkg/auth"
 	"gemma.intevation.de/gemma/pkg/config"
-	"gemma.intevation.de/gemma/pkg/misc"
 )
 
 type (
@@ -529,68 +527,3 @@
 		}(jc, idj)
 	}
 }
-
-const (
-	selectEmailSQL = `SELECT email_address FROM users.list_users WHERE username = $1`
-
-	importNotificationMailSubject = `import notification mail`
-)
-
-var (
-	importNotificationMailTmpl = template.Must(
-		template.New("notification").Parse(`Dear {{ .User }},
-
-a {{ .Description }} import on server {{ .Server }} triggered
-this email notification.
-
-{{ if eq .State "accepted" }}The imported data were successfully integrated into the database.{{ end -}}
-{{ if eq .State "failed" }}The import failed for some reasons.{{ end -}}
-{{ if eq .State "pending" }}The imported data could be integrated into the database
-but your final decision is needed.{{ end }}
-
-Please follow this link to have a closer look at the details:
-
-{{ .Server }}/#/?{{ if eq .State "pending" }}review{{ else }}importlog{{ end }}={{ .ID }}
-
-Best regards
-    Your service team`))
-)
-
-func sendNotificationMail(user, description, state string, id int64) {
-	config.WaitReady()
-
-	ctx := context.Background()
-	var email string
-	if err := auth.RunAs(ctx, user,
-		func(conn *sql.Conn) error {
-			return conn.QueryRowContext(ctx, selectEmailSQL, user).Scan(&email)
-		},
-	); err != nil {
-		log.Printf("error: %v\n", err)
-		return
-	}
-
-	data := struct {
-		User        string
-		Description string
-		Server      string
-		State       string
-		ID          int64
-	}{
-		User:        user,
-		Description: description,
-		Server:      config.ExternalURL(),
-		State:       state,
-		ID:          id,
-	}
-
-	var body strings.Builder
-	if err := importNotificationMailTmpl.Execute(&body, &data); err != nil {
-		log.Printf("error: %v\n", err)
-		return
-	}
-
-	if err := misc.SendMail(email, importNotificationMailSubject, body.String()); err != nil {
-		log.Printf("error: %v\n", err)
-	}
-}