changeset 2153:cdd68f555ad7

Print templates: Implemented /api/templates/print/{name} DELETE.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 08 Feb 2019 12:11:15 +0100
parents 8132434f4093
children a08e0f532304
files pkg/controllers/printtemplates.go
diffstat 1 files changed, 51 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/printtemplates.go	Fri Feb 08 11:47:31 2019 +0100
+++ b/pkg/controllers/printtemplates.go	Fri Feb 08 12:11:15 2019 +0100
@@ -19,6 +19,7 @@
 	"time"
 
 	"gemma.intevation.de/gemma/pkg/models"
+	"github.com/gorilla/mux"
 )
 
 const (
@@ -29,6 +30,12 @@
 FROM
   users.templates
 ORDER BY date_info DESC`
+
+	hasPrintTemplateSQL = `
+SELECT true FROM users.templates WHERE name = $1`
+
+	deletePrintTemplateSQL = `
+DELETE FROM users.templates WHERE name = $1`
 )
 
 func listPrintTemplates(
@@ -87,7 +94,50 @@
 	req *http.Request,
 	conn *sql.Conn,
 ) (jr JSONResult, err error) {
-	// TODO: Implement me!
+
+	ctx := req.Context()
+
+	name := mux.Vars(req)["name"]
+
+	var tx *sql.Tx
+	if tx, err = conn.BeginTx(ctx, nil); err != nil {
+		return
+	}
+	defer tx.Rollback()
+
+	var dummy bool
+	err = tx.QueryRowContext(ctx, hasPrintTemplateSQL, name).Scan(&dummy)
+
+	switch {
+	case err == sql.ErrNoRows:
+		err = JSONError{
+			Code:    http.StatusNotFound,
+			Message: "No such template found",
+		}
+		return
+	case err != nil:
+		return
+	case !dummy:
+		err = JSONError{
+			Code:    http.StatusInternalServerError,
+			Message: "Unexpected return value from database query",
+		}
+	}
+
+	if _, err = tx.ExecContext(ctx, deletePrintTemplateSQL, name); err != nil {
+		return
+	}
+
+	if err = tx.Commit(); err != nil {
+		return
+	}
+
+	jr = JSONResult{
+		Result: map[string]string{
+			"deleted": name,
+		},
+	}
+
 	return
 }