Mercurial > gemma
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 }