changeset 1583:caedd9b176f2

Added GET to /api/imports/scheduler.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 13 Dec 2018 18:37:35 +0100
parents dc727824183a
children 5d9e0adf73d1
files pkg/controllers/routes.go pkg/controllers/scheduler.go pkg/models/scheduler.go schema/gemma.sql
diffstat 4 files changed, 77 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/routes.go	Thu Dec 13 18:08:17 2018 +0100
+++ b/pkg/controllers/routes.go	Thu Dec 13 18:37:35 2018 +0100
@@ -175,6 +175,12 @@
 		Handle: importBottleneck,
 	})).Methods(http.MethodPost)
 
+	// Import scheduler configuration
+	api.Handle("/imports/scheduler",
+		waterwayAdmin(&JSONHandler{
+			Handle: listScheduler,
+		})).Methods(http.MethodGet)
+
 	// Import queue
 	lsImports := waterwayAdmin(&JSONHandler{
 		Handle: listImports,
@@ -202,12 +208,6 @@
 			Handle: reviewImport,
 		})).Methods(http.MethodPut)
 
-	// Import scheduler configuration
-	api.Handle("/imports/scheduler}",
-		waterwayAdmin(&JSONHandler{
-			Handle: listScheduler,
-		})).Methods(http.MethodGet)
-
 	// Token handling: Login/Logout.
 	api.HandleFunc("/login", login).
 		Methods(http.MethodPost)
--- a/pkg/controllers/scheduler.go	Thu Dec 13 18:08:17 2018 +0100
+++ b/pkg/controllers/scheduler.go	Thu Dec 13 18:37:35 2018 +0100
@@ -16,6 +16,22 @@
 import (
 	"database/sql"
 	"net/http"
+
+	"gemma.intevation.de/gemma/pkg/models"
+)
+
+const (
+	selectImportConfigurationSQL = `
+SELECT
+  id,
+  username,
+  kind,
+  send_email,
+  auto_accept,
+  cron,
+  url
+FROM waterway.import_configuration
+ORDER by id`
 )
 
 func listScheduler(
@@ -23,6 +39,48 @@
 	req *http.Request,
 	conn *sql.Conn,
 ) (jr JSONResult, err error) {
-	// TODO: Implement me!
+
+	ctx := req.Context()
+	var rows *sql.Rows
+
+	if rows, err = conn.QueryContext(ctx, selectImportConfigurationSQL); err != nil {
+		return
+	}
+	defer rows.Close()
+
+	list := []*models.IDImportConfig{}
+
+	for rows.Next() {
+		var (
+			entry models.IDImportConfig
+			kind  string
+			cron  sql.NullString
+			url   sql.NullString
+		)
+		if err = rows.Scan(
+			&entry.ID,
+			&kind,
+			&entry.SendEMail,
+			&entry.AutoAccept,
+			&cron,
+		); err != nil {
+			return
+		}
+		entry.Kind = models.ImportKind(kind)
+		if cron.Valid {
+			cs := models.CronSpec(cron.String)
+			entry.Cron = &cs
+		}
+		if url.Valid {
+			entry.URL = &url.String
+		}
+		list = append(list, &entry)
+	}
+
+	if err = rows.Err(); err != nil {
+		return
+	}
+
+	jr = JSONResult{Result: list}
 	return
 }
--- a/pkg/models/scheduler.go	Thu Dec 13 18:08:17 2018 +0100
+++ b/pkg/models/scheduler.go	Thu Dec 13 18:37:35 2018 +0100
@@ -28,11 +28,20 @@
 
 	ImportConfig struct {
 		Kind       ImportKind `json:"kind"`
-		Cron       CronSpec   `json:"cron"`
 		SendEMail  bool       `json:"send-email"`
 		AutoAccept bool       `json:"auto-accept"`
+		Cron       *CronSpec  `json:"cron"`
 		URL        *string    `json:"url"`
 	}
+
+	IDImportConfig struct {
+		ID         int64      `json:"id"`
+		Kind       ImportKind `json:"kind"`
+		SendEMail  bool       `json:"send-email"`
+		AutoAccept bool       `json:"auto-accept"`
+		Cron       *CronSpec  `json:"cron,omitempty"`
+		URL        *string    `json:"url,omitempty"`
+	}
 )
 
 func (ik *ImportKind) UnmarshalJSON(data []byte) error {
--- a/schema/gemma.sql	Thu Dec 13 18:08:17 2018 +0100
+++ b/schema/gemma.sql	Thu Dec 13 18:37:35 2018 +0100
@@ -550,6 +550,8 @@
                 ON DELETE CASCADE
                 ON UPDATE CASCADE,
         kind varchar NOT NULL,
+        send_email boolean NOT NULL DEFAULT false,
+        auto_accept boolean NOT NULL DEFAULT false,
         cron varchar,
         url  varchar
     )