changeset 2160:2bf92b876984

Merged
author Sascha Wilde <wilde@intevation.de>
date Fri, 08 Feb 2019 12:51:20 +0100
parents 5fdeb41f3ed4 (current diff) 7bd485bf85e8 (diff)
children 7444b75d5497
files
diffstat 1 files changed, 59 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/printtemplates.go	Fri Feb 08 12:50:42 2019 +0100
+++ b/pkg/controllers/printtemplates.go	Fri Feb 08 12:51:20 2019 +0100
@@ -44,6 +44,10 @@
 
 	selectPrintTemplateSQL = `
 SELECT template_data FROM users.templates WHERE name = $1`
+
+	insertPrintTemplateSQL = `
+INSERT INTO users.templates (template_name, template_data)
+VALUES ($1, $2)`
 )
 
 func listPrintTemplates(
@@ -112,11 +116,64 @@
 }
 
 func createPrintTemplate(
-	_ interface{},
+	input interface{},
 	req *http.Request,
 	conn *sql.Conn,
 ) (jr JSONResult, err error) {
-	// TODO: Implement me!
+
+	ctx := req.Context()
+	in := input.(*models.PrintTemplateIn)
+
+	if in.Name == "" {
+		err = JSONError{
+			Code:    http.StatusBadRequest,
+			Message: "Template must have a none empty name",
+		}
+		return
+	}
+	if len(in.Template) == 0 {
+		err = JSONError{
+			Code:    http.StatusBadRequest,
+			Message: "Template must have a none empty template",
+		}
+		return
+	}
+	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, in.Name).Scan(&dummy)
+
+	switch {
+	case err == sql.ErrNoRows:
+		// This is fine.
+	case err != nil:
+		return
+	default:
+		err = JSONError{
+			Code:    http.StatusBadRequest,
+			Message: "A template with this name already exists",
+		}
+		return
+	}
+	data := pgtype.Bytea{Bytes: in.Template, Status: pgtype.Present}
+
+	if _, err = tx.ExecContext(ctx, insertPrintTemplateSQL, in.Name, &data); err != nil {
+		return
+	}
+
+	if err = tx.Commit(); err != nil {
+		return
+	}
+	jr = JSONResult{
+		Code: http.StatusCreated,
+		Result: map[string]string{
+			"created": in.Name,
+		},
+	}
 	return
 }