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